<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mzsh &#187; php</title>
	<atom:link href="http://www.phpblog.cn/archives/category/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.phpblog.cn</link>
	<description>昨夜的火光，今天的迷茫， 有情的背叛，无情的死亡。 山水远，只影向谁去？ 曼珠沙华，开在火中央....</description>
	<lastBuildDate>Wed, 19 May 2010 13:49:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>使用for循环合并提高效率</title>
		<link>http://www.phpblog.cn/archives/324</link>
		<comments>http://www.phpblog.cn/archives/324#comments</comments>
		<pubDate>Sun, 28 Feb 2010 04:35:47 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.phpblog.cn/?p=324</guid>
		<description><![CDATA[在使用大量次的for循环时，往往由于循环次数较多而严重影响程序执行效率，这时，我们可以使用循环合并来解决这个问题。
首先看一个普通的for循环，这个循环用于计算50000000次e的指数。
&#60;?php
for ($i = 0; $i &#60; 50000000; $i++) {
exp(12);
}
我们看一下执行时间：
$ time php for.php
real    0m49.217s
user    0m32.522s
sys     0m0.280s
可以看到，总共需要49s。这时，我们对for循环做一点改动：
&#60;?php
for ($i = 0; $i &#60; 50000000; $i++) {
exp(12);
$i++;
exp(12);
$i++;
exp(12);
$i++;
exp(12);
$i++;
exp(12);
}
这样改动后，exp()函数依然被执行了50000000次，但for只会循环50000000 / 5 = 10000000 次。这时，再来看一下执行时间：
$ time php for.php
real    0m28.755s
user    0m23.953s
sys     0m0.204s
可以看到，现在只需要28s，效率提高了大约42%，还是比较明显的。]]></description>
			<content:encoded><![CDATA[<p>在使用大量次的for循环时，往往由于循环次数较多而严重影响程序执行效率，这时，我们可以使用循环合并来解决这个问题。</p>
<p>首先看一个普通的for循环，这个循环用于计算50000000次e的指数。</p>
<blockquote><p>&lt;?php<br />
for ($i = 0; $i &lt; 50000000; $i++) {<br />
exp(12);<br />
}</p></blockquote>
<p>我们看一下执行时间：</p>
<blockquote><p>$ time php for.php<br />
real    0m49.217s<br />
user    0m32.522s<br />
sys     0m0.280s</p></blockquote>
<p>可以看到，总共需要49s。这时，我们对for循环做一点改动：</p>
<blockquote><p>&lt;?php<br />
for ($i = 0; $i &lt; 50000000; $i++) {<br />
exp(12);<br />
$i++;<br />
exp(12);<br />
$i++;<br />
exp(12);<br />
$i++;<br />
exp(12);<br />
$i++;<br />
exp(12);<br />
}</p></blockquote>
<p>这样改动后，exp()函数依然被执行了50000000次，但for只会循环50000000 / 5 = 10000000 次。这时，再来看一下执行时间：</p>
<blockquote><p>$ time php for.php<br />
real    0m28.755s<br />
user    0m23.953s<br />
sys     0m0.204s</p></blockquote>
<p>可以看到，现在只需要28s，效率提高了大约42%，还是比较明显的。</p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/324/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php.curl详解</title>
		<link>http://www.phpblog.cn/archives/199</link>
		<comments>http://www.phpblog.cn/archives/199#comments</comments>
		<pubDate>Wed, 12 Aug 2009 02:34:06 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.phpblog.cn/?p=199</guid>
		<description><![CDATA[PHP中的CURL函数库（Client URL Library Function）
curl_close - 关闭一个curl会话
curl_copy_handle - 拷贝一个curl连接资源的所有内容和参数
curl_errno - 返回一个包含当前会话错误信息的数字编号
curl_error - 返回一个包含当前会话错误信息的字符串
curl_exec - 执行一个curl会话
curl_getinfo - 获取一个curl连接资源句柄的信息
curl_init - 初始化一个curl会话
curl_multi_add_handle - 向curl批处理会话中添加单独的curl句柄资源
curl_multi_close - 关闭一个批处理句柄资源
curl_multi_exec - 解析一个curl批处理句柄
curl_multi_getcontent - 返回获取的输出的文本流
curl_multi_info_read - 获取当前解析的curl的相关传输信息
curl_multi_init - 初始化一个curl批处理句柄资源
curl_multi_remove_handle - 移除curl批处理句柄资源中的某个句柄资源
curl_multi_select - Get all the sockets associated with the cURL extension, which can then be "selected"
curl_setopt_array - 以数组的形式为一个curl设置会话参数
curl_setopt - 为一个curl设置会话参数
curl_version - 获取curl相关的版本信息
curl_init()函数的作用初始化一个curl会话，curl_init()函数唯一的一个参数是可选的，表示一个url地址。
curl_exec()函数的作用是执行一个curl会话，唯一的参数是curl_init()函数返回的句柄。
curl_close()函数的作用是关闭一个curl会话，唯一的参数是curl_init()函数返回的句柄。
&#60;?php
$ch = curl_init("http://www.baidu.com/");
curl_exec($ch);
curl_close($ch);
?&#62;
curl_version()函数的作用是获取curl相关的版本信息，curl_version()函数有一个参数，不清楚是做什么的

可设置的参数有：
CURLOPT_AUTOREFERER
自动设置header中的referer信息
CURLOPT_BINARYTRANSFER
在启用CURLOPT_RETURNTRANSFER时候将获取数据返回
CURLOPT_COOKIESESSION
启用时curl会仅仅传递一个session [...]]]></description>
			<content:encoded><![CDATA[<p>PHP中的CURL函数库（Client URL Library Function）</p>
<p>curl_close - 关闭一个curl会话<br />
curl_copy_handle - 拷贝一个curl连接资源的所有内容和参数<br />
curl_errno - 返回一个包含当前会话错误信息的数字编号<br />
curl_error - 返回一个包含当前会话错误信息的字符串<br />
curl_exec - 执行一个curl会话<br />
curl_getinfo - 获取一个curl连接资源句柄的信息<br />
curl_init - 初始化一个curl会话<br />
curl_multi_add_handle - 向curl批处理会话中添加单独的curl句柄资源<br />
curl_multi_close - 关闭一个批处理句柄资源<br />
curl_multi_exec - 解析一个curl批处理句柄<br />
curl_multi_getcontent - 返回获取的输出的文本流<br />
curl_multi_info_read - 获取当前解析的curl的相关传输信息<br />
curl_multi_init - 初始化一个curl批处理句柄资源<br />
curl_multi_remove_handle - 移除curl批处理句柄资源中的某个句柄资源<br />
curl_multi_select - Get all the sockets associated with the cURL extension, which can then be "selected"<br />
curl_setopt_array - 以数组的形式为一个curl设置会话参数<br />
curl_setopt - 为一个curl设置会话参数<br />
curl_version - 获取curl相关的版本信息</p>
<p>curl_init()函数的作用初始化一个curl会话，curl_init()函数唯一的一个参数是可选的，表示一个url地址。<br />
curl_exec()函数的作用是执行一个curl会话，唯一的参数是curl_init()函数返回的句柄。<br />
curl_close()函数的作用是关闭一个curl会话，唯一的参数是curl_init()函数返回的句柄。</p>
<blockquote><p>&lt;?php<br />
$ch = curl_init("http://www.baidu.com/");<br />
curl_exec($ch);<br />
curl_close($ch);<br />
?&gt;</p></blockquote>
<p>curl_version()函数的作用是获取curl相关的版本信息，curl_version()函数有一个参数，不清楚是做什么的<br />
<span id="more-199"></span><br />
可设置的参数有：</p>
<p>CURLOPT_AUTOREFERER<br />
自动设置header中的referer信息</p>
<p>CURLOPT_BINARYTRANSFER<br />
在启用CURLOPT_RETURNTRANSFER时候将获取数据返回</p>
<p>CURLOPT_COOKIESESSION<br />
启用时curl会仅仅传递一个session cookie，忽略其他的cookie，默认状况下curl会将所有的cookie返回给服务端。session cookie是指那些用来判断服务器端的session是否有效而存在的cookie。</p>
<p>CURLOPT_CRLF<br />
启用时将Unix的换行符转换成回车换行符。</p>
<p>CURLOPT_DNS_USE_GLOBAL_CACHE<br />
启用时会启用一个全局的DNS缓存，此项为线程安全的，并且默认为true。</p>
<p>CURLOPT_FAILONERROR<br />
显示HTTP状态码，默认行为是忽略编号小于等于400的HTTP信息</p>
<p>CURLOPT_FILETIME<br />
启用时会尝试修改远程文档中的信息。结果信息会通过curl_getinfo()函数的CURLINFO_FILETIME选项返回。</p>
<p>CURLOPT_FOLLOWLOCATION<br />
启用时会将服务器服务器返回的"Location:"放在header中递归的返回给服务器，使用CURLOPT_MAXREDIRS可以限定递归返回的数量。</p>
<p>CURLOPT_FORBID_REUSE<br />
在完成交互以后强迫断开连接，不能重用。</p>
<p>CURLOPT_FRESH_CONNECT<br />
强制获取一个新的连接，替代缓存中的连接。</p>
<p>CURLOPT_FTP_USE_EPRT<br />
TRUE to use EPRT (and LPRT) when doing active FTP downloads. Use FALSE to disable EPRT and LPRT and use PORT only.<br />
Added in PHP 5.0.0.</p>
<p>CURLOPT_FTP_USE_EPSV<br />
TRUE to first try an EPSV command for FTP transfers before reverting back to PASV. Set to FALSE to disable EPSV.</p>
<p>CURLOPT_FTPAPPEND<br />
TRUE to append to the remote file instead of overwriting it.</p>
<p>CURLOPT_FTPASCII<br />
An alias of CURLOPT_TRANSFERTEXT. Use that instead.</p>
<p>CURLOPT_FTPLISTONLY<br />
TRUE to only list the names of an FTP directory.</p>
<p>CURLOPT_HEADER<br />
启用时会将头文件的信息作为数据流输出。</p>
<p>CURLOPT_HTTPGET<br />
启用时会设置HTTP的method为GET，因为GET是默认是，所以只在被修改的情况下使用。</p>
<p>CURLOPT_HTTPPROXYTUNNEL<br />
启用时会通过HTTP代理来传输。</p>
<p>CURLOPT_MUTE<br />
讲curl函数中所有修改过的参数恢复默认值。</p>
<p>CURLOPT_NETRC<br />
在连接建立以后，访问~/.netrc文件获取用户名和密码信息连接远程站点。</p>
<p>CURLOPT_NOBODY<br />
启用时将不对HTML中的body部分进行输出。</p>
<p>CURLOPT_NOPROGRESS<br />
启用时关闭curl传输的进度条，此项的默认设置为true</p>
<p>CURLOPT_NOSIGNAL<br />
启用时忽略所有的curl传递给php进行的信号。在SAPI多线程传输时此项被默认打开。</p>
<p>CURLOPT_POST<br />
启用时会发送一个常规的POST请求，类型为：application/x-www-form-urlencoded，就像表单提交的一样。</p>
<p>CURLOPT_PUT<br />
启用时允许HTTP发送文件，必须同时设置CURLOPT_INFILE和CURLOPT_INFILESIZE</p>
<p>CURLOPT_RETURNTRANSFER<br />
讲curl_exec()获取的信息以文件流的形式返回，而不是直接输出。</p>
<p>CURLOPT_SSL_VERIFYPEER<br />
FALSE to stop cURL from verifying the peer's certificate. Alternate certificates to verify against can be specified with the CURLOPT_CAINFO option or a certificate directory can be specified with the CURLOPT_CAPATH option. CURLOPT_SSL_VERIFYHOST may also need to be TRUE or FALSE if CURLOPT_SSL_VERIFYPEER is disabled (it defaults to 2). TRUE by default as of cURL 7.10. Default bundle installed as of cURL 7.10.</p>
<p>CURLOPT_TRANSFERTEXT<br />
TRUE to use ASCII mode for FTP transfers. For LDAP, it retrieves data in plain text instead of HTML. On Windows systems, it will not set STDOUT to binary mode.</p>
<p>CURLOPT_UNRESTRICTED_AUTH<br />
在使用CURLOPT_FOLLOWLOCATION产生的header中的多个locations中持续追加用户名和密码信息，即使域名已发生改变。</p>
<p>CURLOPT_UPLOAD<br />
启用时允许文件传输</p>
<p>CURLOPT_VERBOSE<br />
启用时会汇报所有的信息，存放在STDERR或指定的CURLOPT_STDERR中</p>
<p>CURLOPT_BUFFERSIZE<br />
每次获取的数据中读入缓存的大小，这个值每次都会被填满。</p>
<p>CURLOPT_CLOSEPOLICY<br />
不是CURLCLOSEPOLICY_LEAST_RECENTLY_USED就是CURLCLOSEPOLICY_OLDEST，还存在另外三个，但是curl暂时还不支持。.</p>
<p>CURLOPT_CONNECTTIMEOUT<br />
在发起连接前等待的时间，如果设置为0，则不等待。</p>
<p>CURLOPT_DNS_CACHE_TIMEOUT<br />
设置在内存中保存DNS信息的时间，默认为120秒。</p>
<p>CURLOPT_FTPSSLAUTH<br />
The FTP authentication method (when is activated): CURLFTPAUTH_SSL (try SSL first), CURLFTPAUTH_TLS (try TLS first), or CURLFTPAUTH_DEFAULT (let cURL decide).</p>
<p>CURLOPT_HTTP_VERSION<br />
设置curl使用的HTTP协议，CURL_HTTP_VERSION_NONE（让curl自己判断），CURL_HTTP_VERSION_1_0（HTTP/1.0），CURL_HTTP_VERSION_1_1（HTTP/1.1）</p>
<p>CURLOPT_HTTPAUTH<br />
使用的HTTP验证方法，可选的值有：CURLAUTH_BASIC，CURLAUTH_DIGEST，CURLAUTH_GSSNEGOTIATE，CURLAUTH_NTLM，CURLAUTH_ANY，CURLAUTH_ANYSAFE，可以使用"|"操作符分隔多个值，curl让服务器选择一个支持最好的值，CURLAUTH_ANY等价于CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM，CURLAUTH_ANYSAFE等价于CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM</p>
<p>CURLOPT_INFILESIZE<br />
设定上传文件的大小</p>
<p>CURLOPT_LOW_SPEED_LIMIT<br />
当传输速度小于CURLOPT_LOW_SPEED_LIMIT时，PHP会根据CURLOPT_LOW_SPEED_TIME来判断是否因太慢而取消传输。</p>
<p>CURLOPT_LOW_SPEED_TIME<br />
The number of seconds the transfer should be below CURLOPT_LOW_SPEED_LIMIT for PHP to consider the transfer too slow and abort.<br />
当传输速度小于CURLOPT_LOW_SPEED_LIMIT时，PHP会根据CURLOPT_LOW_SPEED_TIME来判断是否因太慢而取消传输。</p>
<p>CURLOPT_MAXCONNECTS<br />
允许的最大连接数量，超过是会通过CURLOPT_CLOSEPOLICY决定应该停止哪些连接</p>
<p>CURLOPT_MAXREDIRS<br />
指定最多的HTTP重定向的数量，这个选项是和CURLOPT_FOLLOWLOCATION一起使用的。</p>
<p>CURLOPT_PORT<br />
一个可选的用来指定连接端口的量</p>
<p>CURLOPT_PROXYAUTH<br />
The HTTP authentication method(s) to use for the proxy connection. Use the same bitmasks as described in CURLOPT_HTTPAUTH. For proxy authentication, only CURLAUTH_BASIC and CURLAUTH_NTLM are currently supported.</p>
<p>CURLOPT_PROXYPORT<br />
The port number of the proxy to connect to. This port number can also be set in CURLOPT_PROXY.</p>
<p>CURLOPT_PROXYTYPE<br />
Either CURLPROXY_HTTP (default) or CURLPROXY_SOCKS5.</p>
<p>CURLOPT_RESUME_FROM<br />
在恢复传输时传递一个字节偏移量（用来断点续传）</p>
<p>CURLOPT_SSL_VERIFYHOST<br />
1 to check the existence of a common name in the SSL peer certificate.<br />
2 to check the existence of a common name and also verify that it matches the hostname provided.</p>
<p>CURLOPT_SSLVERSION<br />
The SSL version (2 or 3) to use. By default PHP will try to determine this itself, although in some cases this must be set manually.</p>
<p>CURLOPT_TIMECONDITION<br />
如果在CURLOPT_TIMEVALUE指定的某个时间以后被编辑过，则使用CURL_TIMECOND_IFMODSINCE返回页面，如果没有被修改过，并且CURLOPT_HEADER为true，则返回一个"304 Not Modified"的header，CURLOPT_HEADER为false，则使用CURL_TIMECOND_ISUNMODSINCE，默认值为 CURL_TIMECOND_IFMODSINCE</p>
<p>CURLOPT_TIMEOUT<br />
设置curl允许执行的最长秒数</p>
<p>CURLOPT_TIMEVALUE<br />
设置一个CURLOPT_TIMECONDITION使用的时间戳，在默认状态下使用的是CURL_TIMECOND_IFMODSINCE</p>
<p>CURLOPT_CAINFO<br />
The name of a file holding one or more certificates to verify the peer with. This only makes sense when used in combination with CURLOPT_SSL_VERIFYPEER.</p>
<p>CURLOPT_CAPATH<br />
A directory that holds multiple CA certificates. Use this option alongside CURLOPT_SSL_VERIFYPEER.</p>
<p>CURLOPT_COOKIE<br />
设定HTTP请求中"Set-Cookie:"部分的内容。</p>
<p>CURLOPT_COOKIEFILE<br />
包含cookie信息的文件名称，这个cookie文件可以是Netscape格式或者HTTP风格的header信息。</p>
<p>CURLOPT_COOKIEJAR<br />
连接关闭以后，存放cookie信息的文件名称</p>
<p>CURLOPT_CUSTOMREQUEST<br />
A custom request method to use instead of "GET" or "HEAD" when doing a HTTP request. This is useful for doing "DELETE" or other, more obscure HTTP requests. Valid values are things like "GET", "POST", "CONNECT" and so on; i.e. Do not enter a whole HTTP request line here. For instance, entering "GET /index.html HTTP/1.0\r\n\r\n" would be incorrect.<br />
Note: Don't do this without making sure the server supports the custom request method first.</p>
<p>CURLOPT_EGBSOCKET<br />
Like CURLOPT_RANDOM_FILE, except a filename to an Entropy Gathering Daemon socket.</p>
<p>CURLOPT_ENCODING<br />
header中"Accept-Encoding: "部分的内容，支持的编码格式为："identity"，"deflate"，"gzip"。如果设置为空字符串，则表示支持所有的编码格式</p>
<p>CURLOPT_FTPPORT<br />
The value which will be used to get the IP address to use for the FTP "POST" instruction. The "POST" instruction tells the remote server to connect to our specified IP address. The string may be a plain IP address, a hostname, a network interface name (under Unix), or just a plain '-' to use the systems default IP address.</p>
<p>CURLOPT_INTERFACE<br />
在外部网络接口中使用的名称，可以是一个接口名，IP或者主机名。</p>
<p>CURLOPT_KRB4LEVEL<br />
KRB4(Kerberos 4)安全级别的设置，可以是一下几个值之一："clear"，"safe"，"confidential"，"private"。默认的值为"private"，设置为null的时候表示禁用KRB4，现在KRB4安全仅能在FTP传输中使用。</p>
<p>CURLOPT_POSTFIELDS<br />
在HTTP中的"POST"操作。如果要传送一个文件，需要一个@开头的文件名</p>
<p>CURLOPT_PROXY<br />
设置通过的HTTP代理服务器</p>
<p>CURLOPT_PROXYUSERPWD<br />
连接到代理服务器的，格式为"[username]:[password]"的用户名和密码。</p>
<p>CURLOPT_RANDOM_FILE<br />
设定存放SSL用到的随机数种子的文件名称</p>
<p>CURLOPT_RANGE<br />
设置HTTP传输范围，可以用"X-Y"的形式设置一个传输区间，如果有多个HTTP传输，则使用逗号分隔多个值，形如："X-Y,N-M"。</p>
<p>CURLOPT_REFERER<br />
设置header中"Referer: " 部分的值。</p>
<p>CURLOPT_SSL_CIPHER_LIST<br />
A list of ciphers to use for SSL. For example, RC4-SHA and TLSv1 are valid cipher lists.</p>
<p>CURLOPT_SSLCERT<br />
传递一个包含PEM格式证书的字符串。</p>
<p>CURLOPT_SSLCERTPASSWD<br />
传递一个包含使用CURLOPT_SSLCERT证书必需的密码。</p>
<p>CURLOPT_SSLCERTTYPE<br />
The format of the certificate. Supported formats are "PEM" (default), "DER", and "ENG".</p>
<p>CURLOPT_SSLENGINE<br />
The identifier for the crypto engine of the private SSL key specified in CURLOPT_SSLKEY.</p>
<p>CURLOPT_SSLENGINE_DEFAULT<br />
The identifier for the crypto engine used for asymmetric crypto operations.</p>
<p>CURLOPT_SSLKEY<br />
The name of a file containing a private SSL key.</p>
<p>CURLOPT_SSLKEYPASSWD<br />
The secret password needed to use the private SSL key specified in CURLOPT_SSLKEY.<br />
Note: Since this option contains a sensitive password, remember to keep the PHP script it is contained within safe.</p>
<p>CURLOPT_SSLKEYTYPE<br />
The key type of the private SSL key specified in CURLOPT_SSLKEY. Supported key types are "PEM" (default), "DER", and "ENG".</p>
<p>CURLOPT_URL<br />
需要获取的URL地址，也可以在PHP的curl_init()函数中设置。</p>
<p>CURLOPT_USERAGENT<br />
在HTTP请求中包含一个"user-agent"头的字符串。</p>
<p>CURLOPT_USERPWD<br />
传递一个连接中需要的用户名和密码，格式为："[username]:[password]"。</p>
<p>CURLOPT_HTTP200ALIASES<br />
设置不再以error的形式来处理HTTP 200的响应，格式为一个数组。</p>
<p>CURLOPT_HTTPHEADER<br />
设置一个header中传输内容的数组。</p>
<p>CURLOPT_POSTQUOTE<br />
An array of FTP commands to execute on the server after the FTP request has been performed.</p>
<p>CURLOPT_QUOTE<br />
An array of FTP commands to execute on the server prior to the FTP request.</p>
<p>CURLOPT_FILE<br />
设置输出文件的位置，值是一个资源类型，默认为STDOUT (浏览器)。</p>
<p>CURLOPT_INFILE<br />
在上传文件的时候需要读取的文件地址，值是一个资源类型。</p>
<p>CURLOPT_STDERR<br />
设置一个错误输出地址，值是一个资源类型，取代默认的STDERR。</p>
<p>CURLOPT_WRITEHEADER<br />
设置header部分内容的写入的文件地址，值是一个资源类型。</p>
<p>CURLOPT_HEADERFUNCTION<br />
设置一个回调函数，这个函数有两个参数，第一个是curl的资源句柄，第二个是输出的header数据。header数据的输出必须依赖这个函数，返回已写入的数据大小。</p>
<p>CURLOPT_PASSWDFUNCTION<br />
设置一个回调函数，有三个参数，第一个是curl的资源句柄，第二个是一个密码提示符，第三个参数是密码长度允许的最大值。返回密码的值。</p>
<p>CURLOPT_READFUNCTION<br />
设置一个回调函数，有两个参数，第一个是curl的资源句柄，第二个是读取到的数据。数据读取必须依赖这个函数。返回读取数据的大小，比如0或者EOF。</p>
<p>CURLOPT_WRITEFUNCTION<br />
设置一个回调函数，有两个参数，第一个是curl的资源句柄，第二个是写入的数据。数据写入必须依赖这个函数。返回精确的已写入数据的大小</p>
<p>curl_copy_handle()函数的作用是拷贝一个curl连接资源的所有内容和参数</p>
<blockquote><p>&lt;?php<br />
$ch = curl_init("http://www.baidu.com/");<br />
$another = curl_copy_handle($ch);<br />
curl_exec($another);<br />
curl_close($another);<br />
?&gt;</p>
<p>curl_exec($another);<br />
curl_close($another);<br />
?&gt;</p></blockquote>
<p>curl_error()函数的作用是返回一个包含当前会话错误信息的字符串。<br />
curl_errno()函数的作用是返回一个包含当前会话错误信息的数字编号。</p>
<p>curl_multi_init()函数的作用是初始化一个curl批处理句柄资源。<br />
curl_multi_add_handle()函数的作用是向curl批处理会话中添加单独的curl句柄资源。curl_multi_add_handle()函数有两个参数，第一个参数表示一个curl批处理句柄资源，第二个参数表示一个单独的curl句柄资源。<br />
curl_multi_exec()函数的作用是解析一个curl批处理句柄，curl_multi_exec()函数有两个参数，第一个参数表示一个批处理句柄资源，第二个参数是一个引用值的参数，表示剩余需要处理的单个的curl句柄资源数量。<br />
curl_multi_remove_handle() 函数表示移除curl批处理句柄资源中的某个句柄资源，curl_multi_remove_handle()函数有两个参数，第一个参数表示一个 curl批处理句柄资源，第二个参数表示一个单独的curl句柄资源。<br />
curl_multi_close()函数的作用是关闭一个批处理句柄资源。</p>
<blockquote><p>&lt;?php<br />
$ch1 = curl_init();<br />
$ch2 = curl_init();<br />
curl_setopt($ch1, CURLOPT_URL, "http://www.baidu.com/");<br />
curl_setopt($ch1, CURLOPT_HEADER, 0);<br />
curl_setopt($ch2, CURLOPT_URL, "http://www.google.com/");<br />
curl_setopt($ch2, CURLOPT_HEADER, 0);<br />
$mh = curl_multi_init();<br />
curl_multi_add_handle($mh,$ch1);<br />
curl_multi_add_handle($mh,$ch2);<br />
do {<br />
curl_multi_exec($mh,$flag);<br />
} while ($flag &gt; 0);<br />
curl_multi_remove_handle($mh,$ch1);<br />
curl_multi_remove_handle($mh,$ch2);<br />
curl_multi_close($mh);<br />
?&gt;</p></blockquote>
<p>curl_multi_getcontent()函数的作用是在设置了CURLOPT_RETURNTRANSFER的情况下，返回获取的输出的文本流。</p>
<p>curl_multi_info_read()函数的作用是获取当前解析的curl的相关传输信息。</p>
<p>curl_multi_select()<br />
Get all the sockets associated with the cURL extension, which can then be "selected"</p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/199/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>无法注释掉的php代码</title>
		<link>http://www.phpblog.cn/archives/193</link>
		<comments>http://www.phpblog.cn/archives/193#comments</comments>
		<pubDate>Tue, 11 Aug 2009 10:58:38 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.phpblog.cn/?p=193</guid>
		<description><![CDATA[今天在测试一个正则时，想要用双斜线注释掉下面的代码：
&#60;?php
//preg_match('/&#60;img.*?src=[\'\"]?(http&#124;https&#124;ftp):\/\/([^\'\"]*?.(gif&#124;jpg&#124;png))[\'\" ]{1}.*?&#62;/i', $a, $m);
可是发现这样并不能成功，代码运行之后会打印出：
/i', $a, $m);
应该是代码中有 "?&#62;" 符号的问题，换做这样注释就可以了。
&#60;?php
/*
preg_match('/&#60;img.*?src=[\'\"]?(http&#124;https&#124;ftp):\/\/([^\'\"]*?.(gif&#124;jpg&#124;png))[\'\" ]{1}.*?&#62;/i', $a, $m);
*/]]></description>
			<content:encoded><![CDATA[<p>今天在测试一个正则时，想要用双斜线注释掉下面的代码：</p>
<blockquote><p>&lt;?php<br />
//preg_match('/&lt;img.*?src=[\'\"]?(http|https|ftp):\/\/([^\'\"]*?.(gif|jpg|png))[\'\" ]{1}.*?&gt;/i', $a, $m);</p></blockquote>
<p>可是发现这样并不能成功，代码运行之后会打印出：</p>
<blockquote><p>/i', $a, $m);</p></blockquote>
<p>应该是代码中有 "?&gt;" 符号的问题，换做这样注释就可以了。</p>
<blockquote><p>&lt;?php<br />
/*<br />
preg_match('/&lt;img.*?src=[\'\"]?(http|https|ftp):\/\/([^\'\"]*?.(gif|jpg|png))[\'\" ]{1}.*?&gt;/i', $a, $m);<br />
*/</p></blockquote>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/193/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>去掉a标签中无用的属性</title>
		<link>http://www.phpblog.cn/archives/191</link>
		<comments>http://www.phpblog.cn/archives/191#comments</comments>
		<pubDate>Fri, 24 Jul 2009 09:49:01 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.phpblog.cn/?p=191</guid>
		<description><![CDATA[$data = preg_replace('/&#60;a.*?href="(.*?)".*?&#62;/i', '&#60;a href="\\1"&#62;', $data);]]></description>
			<content:encoded><![CDATA[<blockquote><p>$data = preg_replace('/&lt;a.*?href="(.*?)".*?&gt;/i', '&lt;a href="\\1"&gt;', $data);</p></blockquote>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/191/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>echo &quot;${${phpinfo()}}&quot;;</title>
		<link>http://www.phpblog.cn/archives/186</link>
		<comments>http://www.phpblog.cn/archives/186#comments</comments>
		<pubDate>Tue, 21 Jul 2009 07:19:14 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.phpblog.cn/?p=186</guid>
		<description><![CDATA[echo "${${phpinfo()}}";
这句将导致phpinfo()被执行，在某些情况下，可能会导致安全漏洞。]]></description>
			<content:encoded><![CDATA[<blockquote><p>echo "${${phpinfo()}}";</p></blockquote>
<p>这句将导致phpinfo()被执行，在某些情况下，可能会导致安全漏洞。</p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/186/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>正则表达式的模式修正符</title>
		<link>http://www.phpblog.cn/archives/184</link>
		<comments>http://www.phpblog.cn/archives/184#comments</comments>
		<pubDate>Fri, 17 Jul 2009 12:04:26 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.phpblog.cn/?p=184</guid>
		<description><![CDATA[今天因为没搞清楚一个模式修正符而捣鼓了半天，所以特此记录。
下面列出了当前在 PCRE 中可能使用的修正符。括号中是这些修正符的内部 PCRE 名。修正符中的空格和换行被忽略，其它字符会导致错误。
i (PCRE_CASELESS)
如果设定此修正符，模式中的字符将同时匹配大小写字母。
m（PCRE_MULTILINE）
默认情况下，PCRE 将目标字符串作为单一的一“行”字符所组成的（甚至其中包含有换行符也是如此）。“行起始”元字符（^）仅仅匹配字符串的起始，“行结束”元字符（$）仅仅匹配字符串的结束，或者最后一个字符是换行符时其前面（除非设定了 D 修正符）。这和 Perl 是一样的。
当设定了此修正符，“行起始”和“行结束”除了匹配整个字符串开头和结束外，还分别匹配其中的换行符的之后和之前。这和 Perl 的 /m 修正符是等效的。如果目标字符串中没有“\n”字符或者模式中没有 ^ 或 $，则设定此修正符没有任何效果。
s（PCRE_DOTALL）
如果设定了此修正符，模式中的圆点元字符（.）匹配所有的字符，包括换行符。没有此设定的话，则不包括换行符。这和 Perl 的 /s 修正符是等效的。排除字符类例如 [^a] 总是匹配换行符的，无论是否设定了此修正符。
x（PCRE_EXTENDED）
如果设定了此修正符，模式中的空白字符除了被转义的或在字符类中的以外完全被忽略，在未转义的字符类之外的 # 以及下一个换行符之间的所有字符，包括两头，也都被忽略。这和 Perl 的 /x 修正符是等效的，使得可以在复杂的模式中加入注释。然而注意，这仅适用于数据字符。空白字符可能永远不会出现于模式中的特殊字符序列，例如引入条件子模式的序列 (?( 中间。
e
如果设定了此修正符，preg_replace() 在替换字符串中对逆向引用作正常的替换，将其作为 PHP 代码求值，并用其结果来替换所搜索的字符串。
只有 preg_replace() 使用此修正符，其它 PCRE 函数将忽略之。
注意: 本修正符在 PHP3 中不可用。
A（PCRE_ANCHORED）
如果设定了此修正符，模式被强制为“anchored”，即强制仅从目标字符串的开头开始匹配。此效果也可以通过适当的模式本身来实现（在 Perl 中实现的唯一方法）。
D（PCRE_DOLLAR_ENDONLY）
如果设定了此修正符，模式中的美元元字符仅匹配目标字符串的结尾。没有此选项时，如果最后一个字符是换行符的话，美元符号也会匹配此字符之前（但不会匹配任何其它换行符之前）。如果设定了 m 修正符则忽略此选项。Perl 中没有与其等价的修正符。
S
当一个模式将被使用若干次时，为加速匹配起见值得先对其进行分析。如果设定了此修正符则会进行额外的分析。目前，分析一个模式仅对没有单一固定起始字符的 non-anchored 模式有用。
U（PCRE_UNGREEDY）
本修正符反转了匹配数量的值使其不是默认的重复，而变成在后面跟上“?”才变得重复。这和 Perl 不兼容。也可以通过在模式之中设定 (?U) 修正符或者在数量符之后跟一个问号（如 .*?）来启用此选项。
X（PCRE_EXTRA）
此修正符启用了一个 PCRE [...]]]></description>
			<content:encoded><![CDATA[<p>今天因为没搞清楚一个模式修正符而捣鼓了半天，所以特此记录。</p>
<p>下面列出了当前在 PCRE 中可能使用的修正符。括号中是这些修正符的内部 PCRE 名。修正符中的空格和换行被忽略，其它字符会导致错误。</p>
<p>i (PCRE_CASELESS)<br />
如果设定此修正符，模式中的字符将同时匹配大小写字母。</p>
<p>m（PCRE_MULTILINE）<br />
默认情况下，PCRE 将目标字符串作为单一的一“行”字符所组成的（甚至其中包含有换行符也是如此）。“行起始”元字符（^）仅仅匹配字符串的起始，“行结束”元字符（$）仅仅匹配字符串的结束，或者最后一个字符是换行符时其前面（除非设定了 D 修正符）。这和 Perl 是一样的。</p>
<p>当设定了此修正符，“行起始”和“行结束”除了匹配整个字符串开头和结束外，还分别匹配其中的换行符的之后和之前。这和 Perl 的 /m 修正符是等效的。如果目标字符串中没有“\n”字符或者模式中没有 ^ 或 $，则设定此修正符没有任何效果。</p>
<p>s（PCRE_DOTALL）<br />
如果设定了此修正符，模式中的圆点元字符（.）匹配所有的字符，包括换行符。没有此设定的话，则不包括换行符。这和 Perl 的 /s 修正符是等效的。排除字符类例如 [^a] 总是匹配换行符的，无论是否设定了此修正符。</p>
<p>x（PCRE_EXTENDED）<br />
如果设定了此修正符，模式中的空白字符除了被转义的或在字符类中的以外完全被忽略，在未转义的字符类之外的 # 以及下一个换行符之间的所有字符，包括两头，也都被忽略。这和 Perl 的 /x 修正符是等效的，使得可以在复杂的模式中加入注释。然而注意，这仅适用于数据字符。空白字符可能永远不会出现于模式中的特殊字符序列，例如引入条件子模式的序列 (?( 中间。</p>
<p>e<br />
如果设定了此修正符，preg_replace() 在替换字符串中对逆向引用作正常的替换，将其作为 PHP 代码求值，并用其结果来替换所搜索的字符串。</p>
<p>只有 preg_replace() 使用此修正符，其它 PCRE 函数将忽略之。</p>
<p>注意: 本修正符在 PHP3 中不可用。</p>
<p>A（PCRE_ANCHORED）<br />
如果设定了此修正符，模式被强制为“anchored”，即强制仅从目标字符串的开头开始匹配。此效果也可以通过适当的模式本身来实现（在 Perl 中实现的唯一方法）。</p>
<p>D（PCRE_DOLLAR_ENDONLY）<br />
如果设定了此修正符，模式中的美元元字符仅匹配目标字符串的结尾。没有此选项时，如果最后一个字符是换行符的话，美元符号也会匹配此字符之前（但不会匹配任何其它换行符之前）。如果设定了 m 修正符则忽略此选项。Perl 中没有与其等价的修正符。</p>
<p>S<br />
当一个模式将被使用若干次时，为加速匹配起见值得先对其进行分析。如果设定了此修正符则会进行额外的分析。目前，分析一个模式仅对没有单一固定起始字符的 non-anchored 模式有用。</p>
<p>U（PCRE_UNGREEDY）<br />
本修正符反转了匹配数量的值使其不是默认的重复，而变成在后面跟上“?”才变得重复。这和 Perl 不兼容。也可以通过在模式之中设定 (?U) 修正符或者在数量符之后跟一个问号（如 .*?）来启用此选项。</p>
<p>X（PCRE_EXTRA）<br />
此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式中的任何反斜线后面跟上一个没有特殊意义的字母导致一个错误，从而保留此组合以备将来扩充。默认情况下，和 Perl 一样，一个反斜线后面跟一个没有特殊意义的字母被当成该字母本身。当前没有其它特性受此修正符控制。</p>
<p>u（PCRE_UTF8）<br />
此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用，在 win32 下自 PHP 4.2.3 起可用。自 PHP 4.3.5 起开始检查模式的 UTF-8 合法性。</p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/184/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一组不错的函数，分析http头、cookie串等</title>
		<link>http://www.phpblog.cn/archives/158</link>
		<comments>http://www.phpblog.cn/archives/158#comments</comments>
		<pubDate>Thu, 09 Jul 2009 07:19:36 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.phpblog.cn/?p=158</guid>
		<description><![CDATA[http://cn2.php.net/http_parse_cookie
需要安装PECL]]></description>
			<content:encoded><![CDATA[<p><a href="http://cn2.php.net/http_parse_cookie">http://cn2.php.net/http_parse_cookie</a></p>
<p>需要安装PECL</p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/158/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>php中的安全模式是指的什么？</title>
		<link>http://www.phpblog.cn/archives/135</link>
		<comments>http://www.phpblog.cn/archives/135#comments</comments>
		<pubDate>Wed, 03 Jun 2009 06:51:49 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.phpblog.cn/?p=135</guid>
		<description><![CDATA[PHP 的安全模式是为了试图解决共享服务器（shared-server）安全问题而设立的。在结构上，试图在 PHP 层上解决这个问题是不合理的，但修改 WEB 服务器层和操作系统层显得非常不现实。因此许多人，特别是 ISP，目前使用安全模式。
表格 24-1. 控制安全模式的设置选项有：
设置选项 默认值
safe_mode Off
safe_mode_gid 0
safe_mode_include_dir ""
safe_mode_exec_dir 1
open_basedir ""
safe_mode_allowed_env_vars PHP_
safe_mode_protected_env_vars LD_LIBRARY_PATH
disable_functions ""
当 safe_mode 设置为 on，PHP 将检查当前脚本的拥有者是否和将被文件函数操作的文件的拥有者相匹配。例如： -rw-rw-r-- 1 rasmus rasmus 33 Jul 1 19:20 script.php
-rw-r--r-- 1 root root 1116 May 26 18:01 /etc/passwd
运行 script.php
&#60;?php
readfile(’/etc/passwd’);
?&#62;
如果安全模式被激活，则将会导致以下错误： Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not
allowed to [...]]]></description>
			<content:encoded><![CDATA[<p>PHP 的安全模式是为了试图解决共享服务器（shared-server）安全问题而设立的。在结构上，试图在 PHP 层上解决这个问题是不合理的，但修改 WEB 服务器层和操作系统层显得非常不现实。因此许多人，特别是 ISP，目前使用安全模式。</p>
<p>表格 24-1. 控制安全模式的设置选项有：</p>
<p>设置选项 默认值<br />
safe_mode Off<br />
safe_mode_gid 0<br />
safe_mode_include_dir ""<br />
safe_mode_exec_dir 1<br />
open_basedir ""<br />
safe_mode_allowed_env_vars PHP_<br />
safe_mode_protected_env_vars LD_LIBRARY_PATH<br />
disable_functions ""</p>
<p>当 safe_mode 设置为 on，PHP 将检查当前脚本的拥有者是否和将被文件函数操作的文件的拥有者相匹配。例如： -rw-rw-r-- 1 rasmus rasmus 33 Jul 1 19:20 script.php<br />
-rw-r--r-- 1 root root 1116 May 26 18:01 /etc/passwd</p>
<p>运行 script.php</p>
<p><span style="font-family: Verdana; font-size: x-small;">&lt;?php<br />
readfile(’/etc/passwd’);<br />
?&gt;</span></p>
<p>如果安全模式被激活，则将会导致以下错误： Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not<br />
allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2</p>
<p>同时，或许会存在这样的环境，在该环境下，宽松的 GID 检查已足够，但严格的 UID 检查反而是不适合的。你能用 safe_mode_gid 选项来控制这种检查。如果设置为 On 则进行宽松的 GID 检查；设置为 Off（默认值）则进行 UID 检查。</p>
<p>除了 safe_mode 以外，如果你设置了 open_basedir 选项，则所有的文件操作将被限制在你指定的目录下。例如： &lt;Directory /docroot&gt;<br />
php_admin_value open_basedir /docroot<br />
&lt;/Directory&gt;</p>
<p>如果你在设置了 open_basedir 选项后运行同样的 script.php，则其结果会是： Warning: open_basedir restriction in effect. File is in wrong directory in<br />
/docroot/script.php on line 2</p>
<p>你也能独立地屏蔽某些函数。请注意 disable_functions 选项不能在 php.ini 文件外部使用，也就是说你无法在 httpd.conf 文件的按不同<a style="color: black; text-decoration: none;" href="http://sudu.cn/" target="_blank">虚拟主机</a>或不同目录的方式来屏蔽函数。 如果我们将如下内容加入到 php.ini 文件： disable_functions readfile,system</p>
<p>则我们会得到如下的输出： Warning: readfile() has been disabled for security reasons in<br />
/docroot/script.php on line 2</p>
<p>被安全模式限制或屏蔽的函数<br />
以下安全模式列表可能不完整或不正确。</p>
<p>安全模式限制函数</p>
<p>函数名 限制<br />
dbmopen() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。<br />
dbase_open() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。<br />
filepro() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。<br />
filepro_rowcount() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。<br />
filepro_retrieve() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。<br />
ifx_*() sql_safe_mode 限制, (!= safe mode)<br />
ingres_*() sql_safe_mode 限制, (!= safe mode)<br />
mysql_*() sql_safe_mode 限制, (!= safe mode)<br />
pg_loimport() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。<br />
posix_mkfifo() 将检查你将要操作的目录和正在执行的脚本是否有相同的 UID。<br />
putenv() 遵循 ini 设置的 safe_mode_protected_env_vars 和 safe_mode_allowed_env_vars 选项。请参考 putenv() 函数的有关文件。<br />
move_uploaded_file() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。<br />
chdir() 将检查你将要操作的目录和正在执行的脚本是否有相同的 UID。<br />
dl() 该函数在安全模式中已被屏蔽。<br />
backtick operator 该函数在安全模式中已被屏蔽。<br />
shell_exec()（在功能上和 backticks 函数相同） 该函数在安全模式中已被屏蔽。<br />
exec() 你只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因，目前不能在可执行对象的路径中使用 ..。<br />
system() 你只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因，目前不能在可执行对象的路径中使用 ..。<br />
passthru() 你只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因，目前不能在可执行对象的路径中使用 ..。<br />
popen() 你只能在 safe_mode_exec_dir 设置的目录下进行执行操作。基于某些原因，目前不能在可执行对象的路径中使用 ..。<br />
mkdir() 将检查你将要操作的目录和正在执行的脚本是否有相同的 UID。<br />
rmdir() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。<br />
rename() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。 将检查你将要操作的目录和正在执行的脚本是否有相同的 UID。<br />
unlink() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。 将检查你将要操作的目录和正在执行的脚本是否有相同的 UID。<br />
copy() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。 将检查你将要操作的目录和正在执行的脚本是否有相同的 UID。 (on source and target)<br />
chgrp() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。<br />
chown() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。<br />
chmod() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。 另外，你不能设置 SUID、SGID 和 sticky bits<br />
touch() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。 将检查你将要操作的目录和正在执行的脚本是否有相同的 UID。<br />
symlink() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。 将检查你将要操作的目录和正在执行的脚本是否有相同的 UID。 （注意：仅测试 target）<br />
link() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。 将检查你将要操作的目录和正在执行的脚本是否有相同的 UID。 （注意：仅测试 target）<br />
getallheaders() 在安全模式下，以“authorization”（区分大小写）开头的头信息将不会被返回。警告：getallheaders() 无法在 aol-server 下实现！<br />
header() 在安全模式下，如果你设置了 WWW-Authenticate，当前脚本的 uid 将被添加到该头信息的 realm 部分。<br />
highlight_file(), show_source() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。 将检查你将要操作的目录和正在执行的脚本是否有相同的 UID。 （注意，仅在 4.2.1 版本后有效）<br />
parse_ini_file() 将检查你将要操作的文件/目录和正在执行的脚本是否有相同的 UID。 将检查你将要操作的目录和正在执行的脚本是否有相同的 UID。 （注意，仅在 4.2.1 版本后有效）</p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/135/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP:APC (Alternative PHP Cache)</title>
		<link>http://www.phpblog.cn/archives/131</link>
		<comments>http://www.phpblog.cn/archives/131#comments</comments>
		<pubDate>Wed, 03 Jun 2009 04:54:38 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.phpblog.cn/?p=131</guid>
		<description><![CDATA[Alternative PHP Cache（APC）是 PHP 的一个免费公开的优化代码缓存。它用来提供免费，公开并且强健的架构来缓存和优化 PHP 的中间代码。
http://cn.php.net/apc]]></description>
			<content:encoded><![CDATA[<p>Alternative PHP Cache（APC）是 PHP 的一个免费公开的优化代码缓存。它用来提供免费，公开并且强健的架构来缓存和优化 PHP 的中间代码。</p>
<p><a href="http://cn.php.net/apc" target="_blank">http://cn.php.net/apc</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/131/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于Memcache::get方法的返回值</title>
		<link>http://www.phpblog.cn/archives/117</link>
		<comments>http://www.phpblog.cn/archives/117#comments</comments>
		<pubDate>Tue, 02 Jun 2009 07:36:54 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.phpblog.cn/?p=117</guid>
		<description><![CDATA[Memcache的get方法
1. 如果参数是string 出错或缓存不存在会返回false
2. 如果参数是数组，出错返回false, 缓存不存在会返回array();
特殊类型的存储
Memcache只能储存字符串，除此之外类型的数据都被转化之后(在PHP的实现中是通过序列化)储存，但是也有特殊情况：
false =&#62; 空字符串       true =&#62; 字符串1
null  =&#62; null           1    =&#62; 字符串1
array =&#62; array()        "1"  =&#62; 字符串1
0     =&#62; 字符串0
“0”   =&#62; 字符串0
0.0   =&#62; 字符串0
"0.0" =&#62; “0.0”
所以在使用的时候，一定要注意数据的类型。]]></description>
			<content:encoded><![CDATA[<p>Memcache的get方法</p>
<p>1. 如果参数是string 出错或缓存不存在会返回false<br />
2. 如果参数是数组，出错返回false, 缓存不存在会返回array();</p>
<p>特殊类型的存储</p>
<p>Memcache只能储存字符串，除此之外类型的数据都被转化之后(在PHP的实现中是通过序列化)储存，但是也有特殊情况：</p>
<p>false =&gt; 空字符串       true =&gt; 字符串1<br />
null  =&gt; null           1    =&gt; 字符串1<br />
array =&gt; array()        "1"  =&gt; 字符串1<br />
0     =&gt; 字符串0<br />
“0”   =&gt; 字符串0<br />
0.0   =&gt; 字符串0<br />
"0.0" =&gt; “0.0”</p>
<p>所以在使用的时候，一定要注意数据的类型。</p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/117/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
