<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://itecfun.com/extern.php?action=feed&amp;fid=17&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[个人知识管理站 / PHP]]></title>
		<link>http://www.itecfun.com/index.php</link>
		<description><![CDATA[个人知识管理站 最近发表的主题。]]></description>
		<lastBuildDate>Fri, 17 Jul 2015 08:35:09 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[PHP 问题汇总]]></title>
			<link>http://www.itecfun.com/viewtopic.php?id=3199&amp;action=new</link>
			<description><![CDATA[<p>汇总个人工作学习中遇到的问题及解决方法</p><p><strong>1.php中时差问题</strong><br />通过 如下代码查看当前时间，<br />&lt;?php <br />$t=date(&quot;Y-m-d H:i:s&quot;);<br />echo &quot;Today is &quot;.$t;<br />?&gt;<br />显示出的小时数始终相差6个小时，查看配置文件php.ini中的<br />date.timezone = Europe/Berlin<br />改成<br />date.timezone = PRC ;PRC为中华人民共和国英文缩写</p>]]></description>
			<author><![CDATA[dummy@example.com (xuyg)]]></author>
			<pubDate>Fri, 17 Jul 2015 08:35:09 +0000</pubDate>
			<guid>http://www.itecfun.com/viewtopic.php?id=3199&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[fsockopen函数被禁用的解决之道]]></title>
			<link>http://www.itecfun.com/viewtopic.php?id=3147&amp;action=new</link>
			<description><![CDATA[<p>fsockopen() — Open Internet or Unix domain socket connection </p><p>一、如何禁用fsockopen() <br />下面是两种常用的禁用fsockopen的方法。 <br />1、修改php.ini，将 disable_functions = 后加入 fsockopen <br />2、修改php.ini，将 allow_url_fopen = On 改为 allow_url_fopen = Off </p><p>二、如何解决fsockopen函数被禁用 <br />1、如果服务器没有同时禁用pfsockopen，那么直接将fsockopen函数替换为pfsockopen。 <br />具体操作：搜索程序中的字符串 fsockopen( 替换为 pfsockopen(。示例如下 <br />修改前： <br />[CODE_LITE]$fp = fsockopen($host, 80, $errno, $errstr, 30);[/CODE_LITE] <br />修改后： <br />[CODE_LITE]$fp = pfsockopen($host, 80, $errno, $errstr, 30);[/CODE_LITE] </p><p>2、如果服务器同时禁用了pfsockopen，那么用其他函数代替，如stream_socket_client()。注意：stream_socket_client()和fsockopen()的参数不同。 <br />具体操作：搜索程序中的字符串 fsockopen( 替换为 stream_socket_client(，然后，将原fsockopen函数中的端口参数“80”删掉，并加到$host。示例如下 <br />修改前： <br />[CODE_LITE]$fp = fsockopen($host, 80, $errno, $errstr, 30);[/CODE_LITE] <br />修改后 <br />[CODE_LITE]$fp = stream_socket_client($host.&quot;:80&quot;, $errno, $errstr, 30);[/CODE_LITE] </p><p>3、如果PHP版本低于5.0，fsockopen被禁用，又没有stream_socket_client()怎么办呢？自己写一个函数实现fsockopen的功能，参考代码： <br />[CODE_LITE]function b_fsockopen($host, $port, &amp;$errno, &amp;$errstr, $timeout) { <br />$ip = gethostbyname($host); <br />$s = socket_create(AF_INET, SOCK_STREAM, 0); <br />if (socket_set_nonblock($s)) { <br />$r = @socket_connect($s, $ip, $port); <br />if ($r || socket_last_error() == EINPROGRESS) { <br />$errno = EINPROGRESS; <br />return $s; <br />} <br />} <br />$errno = socket_last_error($s); <br />$errstr = socket_strerror($errno); <br />socket_close($s); <br />return false; <br />}[/CODE_LITE] <br />具体操作：1.首先找到使用fsockopen函数的代码段，将上面代码加至其上端，搜索该代码段中的字符串 fsockopen( 替换为 b_fsockopen(。 <br />2.因为fsockopen函数返回文件指针所以可以被文件函数操作，但是这个b_fsockopen函数没能返回文件指针，需要继续修改代码段：用socket_read(替换掉 fread(，用socket_write(替换掉fwrite(，用socket_close(替换掉fclose(。 </p><p>[FONT-SIZE=4]温馨提示：修改前先备份原文件！！！[/FONT-SIZE] </p><p>文章出处：<a href="http://blog.i1728.com/post/fsockopen.html" rel="nofollow">东方天宇博客</a></p>]]></description>
			<author><![CDATA[dummy@example.com (xuyg)]]></author>
			<pubDate>Thu, 28 May 2015 01:54:07 +0000</pubDate>
			<guid>http://www.itecfun.com/viewtopic.php?id=3147&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[PHPMailer不能连接SMTP服务器的两种常见原因（Could not connect to SMTP host）]]></title>
			<link>http://www.itecfun.com/viewtopic.php?id=3146&amp;action=new</link>
			<description><![CDATA[<p>今日在配置远程服务器上的PHP邮件发送的时候，发现出现Error: Could not connect to SMTP host，换成本地服务器发送却正常，经查发现是服务器上的fsockopen被禁用，一下是网上查到的内容，记录下。<br />原文连接：http://blog.i1728.com/post/PHPMailer_Could_notconnect_to_SMTP_host.html</p><p>PHPmailer无法发送邮件，提示错误Error: Could not connect to SMTP host</p><p>出现这种情况一般有两种原因：<br />1.无法发出请求，本地设置问题 <br />2.连接被stmp服务器拒绝，可能账号出问题，比如发信量大且频繁</p><p>第二种情况比较好解决，换一个登陆账号或者登陆IP就可以了。</p><p>针对第一种情况，执行以下脚本测试<br />&lt;?php<br />$fp = fsockopen(&quot;smtp.163.com&quot;,25,&amp;$errno,&amp;$errstr,60); <br />if(! $fp) <br />&#160; &#160; echo &#039;$errstr&#160; &#160;($errno) &lt;br&gt; \n &#039;; <br />else <br />&#160; &#160; echo &#039;ok &lt;br&gt; \n &#039;;<br />?&gt;</p><p>如果报错:Warning: fsockopen() has been disabled for security reasons。<br />说明fsockopen函数被禁用，PHPmailer发送Email依赖此函数。<br />解决方法参考《fsockopen函数被禁用的解决之道》，修改class.smtp.php中的代码$this-&gt;smtp_conn = @fsockopen 为$this-&gt;smtp_conn = @pfsockopen 即可。</p><p>如果报错:php_network_getaddresses: getaddrinfo failed <br />可能服务器DNS设置问题，导致不能解析域名、从而找不到stmp服务器。也可能服务器所在网络环境屏蔽掉stmp服务器。如果不是自己的机器，暂时没有好的解决方法。</p><p>在之前转载的一篇文章，将<br />function IsSMTP() {<br />$this-&gt;Mailer = &#039;smtp&#039;;<br />}</p><p>改成：<br />function IsSMTP() {<br />$this-&gt;Mailer = &#039;SMTP&#039;;<br />}<br />这个方法是错误的，并不能解决Could not connect to SMTP host，并且会由于代码问题，邮件发送方式改变，<br />本文只说了常见的两种原因，但也可能是其他原因，比如stmp服务器被DDOS或者其他原因暂时不可连接。不在我等考虑范围之内故未列出</p>]]></description>
			<author><![CDATA[dummy@example.com (xuyg)]]></author>
			<pubDate>Thu, 28 May 2015 01:52:54 +0000</pubDate>
			<guid>http://www.itecfun.com/viewtopic.php?id=3146&amp;action=new</guid>
		</item>
	</channel>
</rss>
