如果你已经有账户,那么请 登入 或者现在就 注册一个新账户
V2EX / 技术 / PHP   

  使用php发送msn消息的类

sendMsg

$sendMsg = new sendMsg();

$sendMsg->login('sender@hotmail.com', 'password');

$sendMsg->createSession('recipient@hotmail.com');

$sendMsg->sendMessage('message', 'Times New Roman', 'FF0000');

http://www.fanatic.net.nz/2005/02/15/send-a-message-using-php/... 0 篇回复 | 参与讨论 | 蓝色梦幻 | Add to del.icio.us | Add to reddit | Search in Technorati | Add to Ma.gonolia | Add to BlogMarks | Add to LookSmart FURL | Add to Spurl | Add to simpy | Add to Tailrank

  PHP 6 的新特性

PHP的下一个版本,V6,包含了很的新特性和语法改进,会使它在面向对象方面性更易用。
其他重要的特性:比如在核心函数中对Unicode (统一编码)的支持,这意味着 PHP 6提供了更好的更可靠国际支持。

PHP 已经很流行,被无数的站点使用,被大部分因特网接入商所支持,被Yahoo这样的大网络公司使用着。在即将来临的PHP版本中准备增加一些成功的新特性,使PHP在某些场合下更易用更安全。你准备好接受 PHP 6 了吗?如果你明天就升级了,你的程序会运行得很好吗?你该怎么办?这篇文章集合了PHP 6的改变,他们中的一些备份移植到版本的PHP v5.x,您目前的脚本可能需要进行一些调整。

如果你现在使用不是PHP,但是一直在考虑它,考虑一下它的新特性。这些特点,从Unicode的核心支持到XML支持,使它更容易为你写的功能填补PHP的应用。

PHP 6 新特性

PHP 6当前已经作为开发者快照使用,所以你可以下载和试用一下这篇文章列出很多特性,这些特性已经在当前的快照中实现了。见资源。

改进 Unicode 支持

在PHP的核心函数中,有很多对Unicode 字符串的支持的改进,这些新特性将产生巨大的影响因为它允许PHP为国际字符提供更多的支持。所以如果一个开发者或者架构师使用不同的语言,例如Java程序语言,是因为它具有超过PHP的国际化支持的话,当支持改进时他会花一点时间来考虑一下PHP。

因为今天你已经可以下载到开发者版本的 PHP V6,你将看到一些功能函数已经支持Unicode字符串。有一个函数清单已经被测试和验证了完全可以处理Unicode,参见资源。

命名空间

命名空间是一种避免因函数或者类之间的命名冲突而使你的函数和类以及方法无法读取,而不使用前缀命名惯例的一种方法。因此,通过使用命名空间,你可以命名别人可能已经使用的类名,而不用担心在运行时会出错。表一提供了一个在PHP中使用命名空间的示例。

您不用在源代码中做更新或更改,因为你写的任何PHP代码可以不包含命名空间而运行得很好。因为命名空间特性似乎会移植到PHP 5.3 X中,如果它可以使用,您可以在自己的程序中引用命名空间。

表一,命名空间示例

<?php
// I'm not sure why I would implement my own XMLWriter, but at least
// the name of this one won't collide with the one built in to PHP
namespace NathanAGood;
class XMLWriter
{
// Implementation here...
}

$writer = new NathanAGood::XMLWriter();

?>


Web 2.0 特性

依赖于你怎么使用PHP和你现在脚本的是什么样子的,现在的语言和语法差异,可能会或者不会最大程度的影响下面一些特性,这是指那些直接让你引用的Web 2.0功能到你的PHP应用程序。

SOAP

SOAP 是一种网络服务“说话”的协议,并且支持不少其他语言,例如Java和微软的.NET,虽然有其他的方法来驱动和使用网络服务,比如表象化状态转变(Representational State Transfer )REST,SOAP仍然在使不同平台具有可操作性中是最常用的。此外,SOAP在PHP扩展和PEAR库中使用,SOAP在PHP中默认是不支持的,因此你启用这个扩展或者叫你的ISP启用。此外,PEAR包允许你建立SOAP客户端和服务器,如SOAP包。

如果你改变了默认设置,SOAP将会在PHP 6中启用。这个扩展将提供你很容易的的实现SOAP客户端和SOAP服务,允许你编写的应用提供使用或者网络服务。

如果SOAP扩展是默认设置,那就意味着你不能在PHP中设置它们,如果您开发的PHP应用程序并且它们发布到一个ISP服务器上,您可能需要检查一下你的ISP,以验证SOAP并启用为他们升级。

XML

在PHP 5.1中XMLReader 和XMLWriter已经变成PHP核心的一部分,这使你工作起来更轻松如果在你的PHP程序中需要使用到XML的话。和SOAP扩展一样,如果你使用SOAP或者XML这是个好消息因为PHP 6比已经出炉的PHP4 更适合你。

被删除的东西

除了具有的一些新功能,PHP 6引擎将删除一些在前面版本中已经有的功能。大部分这些功能,如register_globals 和safe_mode 在目前的PHP中被视为“破的”。因为他们可能会暴露一些安全风险。PHP在努力的清除中,在下一个版本中这些将从PHP中删除或者废弃。反对者认为大部分ISP或者企业会保留现在的脚本因为升级到PHP6会破坏现在的的脚本,但是支持者认为很高兴看到PHP团队修补了这些漏洞,并且提供了一个干净,安全的运行工具。

将从PHP删除的功能有:

magic_quotes register_globals register_long_arrays safe_mode... 0 篇回复 | 参与讨论 | 蓝色梦幻 | Add to del.icio.us | Add to reddit | Search in Technorati | Add to Ma.gonolia | Add to BlogMarks | Add to LookSmart FURL | Add to Spurl | Add to simpy | Add to Tailrank

  php项目打包

大家经常会接到一些编程的活,例如设计企业网站,做做财务,统计系统什么的。或许是因为朋友的需求,或许图个零花。不管什么原因吧。等程序做好了,给对方展示、安装,就成了问题。企业网站好说,至少需要个虚拟主机什么的;可是OA,财务……这些内部系统就不好说了,总不能把代码和数据库扔给人家,写个说明,让他们自己照着说明去配置环境,安装代码吧。这样显然不像话,要知道隔行如隔山啊!再者,万一客户离自己呆的地方十万八千里,总不能过去给人安装吧,这样估计所有收入都挡不住这一来一往的车费的。所以把WAMP环境+PHP程序+维护安装卸载程序打成EXE安装包就很有必要。要让客户安装PHP程序就像安装QQ一样简单,方便!

http://www.xilo.cn/blog/2007/12/13/121.html... 0 篇回复 | 参与讨论 | 蓝色梦幻 | Add to del.icio.us | Add to reddit | Search in Technorati | Add to Ma.gonolia | Add to BlogMarks | Add to LookSmart FURL | Add to Spurl | Add to simpy | Add to Tailrank

  PHP 与 Oracle DRCP

http://www.dbanotes.net/opensource/php_oracle_drcp.html... 0 篇回复 | 参与讨论 | 蓝色梦幻 | Add to del.icio.us | Add to reddit | Search in Technorati | Add to Ma.gonolia | Add to BlogMarks | Add to LookSmart FURL | Add to Spurl | Add to simpy | Add to Tailrank

  关于session的配置问题

php的session默认是以文件方式保存在服务器端,并且在客户端使用cookie保存变量,这就会出现一个问题,当一个用户由于某种安全原因关闭了浏览器的cookie,程序中的session相关操作将无法执行。因此,如果能以数据库保存session数据,将不受客户端设置的限制,并且在性能和扩展性等方面有一个飞跃。程序中使用关键函数是session_set_save_handler,同时要将php.ini里的session.save_handler = files 改为 user

数据表结构:[sessions]
CREATE TABLE sessions (
sesskey char(32) not null,
expiry int(11) unsigned not null,
value text not null,
PRIMARY KEY (sesskey)
);

程序代码:[session_inc.php]
<?php
$SESS_DBHOST = "yourhost"; /* database server hostname */
$SESS_DBNAME = "yourdb"; /* database name */
$SESS_DBUSER = "youruser"; /* database user */
$SESS_DBPASS = "yourpassword"; /* database password */

$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");

function sess_open($save_path, $session_name) {
global $SESS_DBHOST, $SESS_DBNAME, $SESS_DBUSER, $SESS_DBPASS, $SESS_DBH;

if (! $SESS_DBH = mysql_pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) {
echo "<li>Can't connect to $SESS_DBHOST as $SESS_DBUSER";
echo "<li>MySQL Error: " . mysql_error();
die;
}

if (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) {
echo "<li>Unable to select database $SESS_DBNAME";
die;
}

return true;
}

function sess_close() {
return true;
}

function sess_read($key) {
global $SESS_DBH, $SESS_LIFE;

$qry = "SELECT value FROM session_tbl WHERE sesskey = '$key' AND expiry > " . time();
$qid = mysql_query($qry, $SESS_DBH);

if (list($value) = mysql_fetch_row($qid)) {
return $value;
}

return false;
}

function sess_write($key, $val) {
global $SESS_DBH, $SESS_LIFE;

$expiry = time() + $SESS_LIFE; //过期时间
$value = addslashes($val);

$qry = "INSERT INTO session_tbl VALUES ('$key', $expiry, '$value')";
$qid = mysql_query($qry, $SESS_DBH);

if (! $qid) {
$qry = "UPDATE session_tbl SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' AND expiry > " . time();
$qid = mysql_query($qry, $SESS_DBH);
}

return $qid;
}

function sess_destroy($key) {
global $SESS_DBH;

$qry = "DELETE FROM session_tbl WHERE sesskey = '$key'";
$qid = mysql_query($qry, $SESS_DBH);

return $qid;
}

function sess_gc($maxlifetime) {
global $SESS_DBH;

$qry = "DELETE FROM session_tbl WHERE expiry < " . time();
$qid = mysql_query($qry, $SESS_DBH);

return mysql_affected_rows($SESS_DBH);
}

session_set_save_handler(
"sess_open",
"sess_close",
"sess_read",
"sess_write",
"sess_destroy",
"sess_gc");

session_start();
?>

完成以上步骤后,在程序中使用require("session_inc.php")来代替session_start()即可,其他的session函数还是象以前一样的方法调用。... 1 篇回复 | 参与讨论 | aneagle | Add to del.icio.us | Add to reddit | Search in Technorati | Add to Ma.gonolia | Add to BlogMarks | Add to LookSmart FURL | Add to Spurl | Add to simpy | Add to Tailrank

  PHP's PEAR on Mac OS X

http://www.macdevcenter.com/pub/a/mac/2003/01/21/pear_macosx.html... 0 篇回复 | 参与讨论 | 蓝色梦幻 | Add to del.icio.us | Add to reddit | Search in Technorati | Add to Ma.gonolia | Add to BlogMarks | Add to LookSmart FURL | Add to Spurl | Add to simpy | Add to Tailrank

  FastCGI模式运行PHP的问题

在用FastCGI模式运行php的时候,有个讨厌的bug。比如,象下面这样调用header函数的时候会产生重复的http头:

header( 'Location: http://www.example.org' );
产生的http头是这样:

Status: 302
Location: http://www.example.com
多出来一个“Status: 302”头信息,如果在调用这个header函数之前已经调用了其他header函数的话,就会造成下面这样的错误:

FastCGI: comm with server "/var/www/web/php5-wrapper.fcgi" aborted: error parsing
headers: duplicate header 'Status'
就是这个php的错误导致Symfony里面forward404Unless函数没法用了,可恶的是这个bug已经存在快两年了,居然还没有修复!没办法,只好自己想办法了,修改lib/symfony/response/sfWebResponse.class.php文件的 sendHttpHeaders函数的开始部分:

public function sendHttpHeaders()
{
// status
$status = 'HTTP/1.0 '.$this->statusCode.' '.$this->statusText;

改成:

public function sendHttpHeaders()
{
// status
if (substr(php_sapi_name(), 0, 3) == 'cgi')
$status = 'Status: '.$this->statusCode.' '.$this->statusText;
else
$status = 'HTTP/1.0 '.$this->statusCode.' '.$this->statusText;


原文:http://www.bolarn.com/index.php/2008/02/06/83/... 0 篇回复 | 参与讨论 | 蓝色梦幻 | Add to del.icio.us | Add to reddit | Search in Technorati | Add to Ma.gonolia | Add to BlogMarks | Add to LookSmart FURL | Add to Spurl | Add to simpy | Add to Tailrank

  刚用curl作了点东西,现在来个小解!

默认php不支持这个东西,如果需要的话,只须把 ssleay32.dll,libeay32.dll以及php_curl.dll拷贝到system32下面,同时在php.ini里面把 ;extension = php_curl.dll前面的 ';'符号去掉,重启一下apache服务,就可以调用这个工具。
下面一个小例子实现远程登陆:
<?php
$ppurl = 'http://passport.com/login.jsp?username=aa&pword=bb';
$ch = curl_init($ppurl);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $ppurl);
$content = curl_exec($ch);
curl_close($ch);
$arr = explode("\n", $content);
print_r($arr);
?>

其中通过发送url数据,然后获取返回过来的head数据,并不直接输出head数据,而是输出到变量中,经过处理打印显示。... 1 篇回复 | 参与讨论 | aneagle | Add to del.icio.us | Add to reddit | Search in Technorati | Add to Ma.gonolia | Add to BlogMarks | Add to LookSmart FURL | Add to Spurl | Add to simpy | Add to Tailrank

  你使用哪个php Framework?

Zend Framework
Symfony
CakePhp
FleaPhp
Codeigniter

我经常用的是Symfony... 0 篇回复 | 参与讨论 | 蓝色梦幻 | Add to del.icio.us | Add to reddit | Search in Technorati | Add to Ma.gonolia | Add to BlogMarks | Add to LookSmart FURL | Add to Spurl | Add to simpy | Add to Tailrank

  Windows下面php5找不到php_curl.dll的问题

出现这样的错误
unable to load dynamic library ‘….php_curl.dll’

解决方法
在php根目录找到这两个文件,复制 libeay32.dll 和 ssleay32.dll到/windows/system32/... 0 篇回复 | 参与讨论 | 蓝色梦幻 | Add to del.icio.us | Add to reddit | Search in Technorati | Add to Ma.gonolia | Add to BlogMarks | Add to LookSmart FURL | Add to Spurl | Add to simpy | Add to Tailrank

  php伴随我走了7、8年

对php的感情可谓是深,多谢php伴我走过的这些年。... 1 篇回复 | 参与讨论 | 蓝色梦幻 | Add to del.icio.us | Add to reddit | Search in Technorati | Add to Ma.gonolia | Add to BlogMarks | Add to LookSmart FURL | Add to Spurl | Add to simpy | Add to Tailrank
创建新主题 | RSS |  NORMAL Mode
© 2007    -   About
a site powered by Project Babel