<?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>秘密花园 &#187; php</title>
	<atom:link href="https://secret.internetwork.net/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>https://secret.internetwork.net</link>
	<description>这是某人网络上的秘密花园，当然，也可以是你的。我不是神秘人，我只是有无法说出的话。</description>
	<lastBuildDate>Wed, 08 Apr 2026 12:11:44 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.8.36</generator>
	<item>
		<title>虚拟主机服务器php fsockopen函数被禁用的解决方法</title>
		<link>https://secret.internetwork.net/share/php-fsockopen/</link>
		<comments>https://secret.internetwork.net/share/php-fsockopen/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 00:57:21 +0000</pubDate>
		<dc:creator><![CDATA[Secret]]></dc:creator>
				<category><![CDATA[分享]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://secret.internetwork.net/?p=439</guid>
		<description><![CDATA[为了服务器安全考虑很多主机商禁用了php的fsock...]]></description>
				<content:encoded><![CDATA[<p>为了服务器安全考虑很多主机商禁用了php的fsockopen函数，昨天进博客，使用cos-html-cache生成静态文件，尼玛提示：<br />
Warning: fsockopen() has been disabled for security reasons in D:\&#8230;\cos-html-cache\cos-html-cache.php on line 35<br />
换了其他版本的cos-html-cache，还是不行。后来找到下面的方法。 = =、（结果不行，因为函数都被禁用了。）<br />
大家试下，很少有我这样的情况的，用其他替代函数。</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 />
$fp = fsockopen($host, 80, $errno, $errstr, 30);<br />
修改后：</p>
<p>$fp = pfsockopen($host, 80, $errno, $errstr, 30);</p>
<p>2、如果服务器同时禁用了pfsockopen，那么用其他函数代替，如stream_socket_client()。注意：stream_socket_client()和fsockopen()的参数不同。<br />
具体操作：搜索程序中的字符串 fsockopen( 替换为 stream_socket_client( ，然后，将原fsockopen函数中的端口参数“80”删掉，并加到$host。示例如下<br />
修改前：</p>
<p>$fp = fsockopen($host, 80, $errno, $errstr, 30);<br />
修改后</p>
<p>$fp = stream_socket_client($host.&#8221;80&#8243;, $errno, $errstr, 30);</p>
<p>3、如果PHP版本低于5.0，fsockopen被禁用，又没有stream_socket_client()怎么办呢？自己写一个函数实现fsockopen的功能，参考代码：</p>
<p>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 />
}<br />
具体操作：1.首先找到使用fsockopen函数的代码段，将上面代码加至其上端，搜索该代码段中的字符串 fsockopen( 替换为 b_fsockopen( 。<br />
2.因为fsockopen函数返回文件指针所以可以被文件函数操作，但是这个b_fsockopen函数没能返回文件指针，需要继续修改代码段：用socket_read( 替换掉 fread( ，用socket_write( 替换掉fwrite( ，用socket_close( 替换掉fclose( 。</p>
]]></content:encoded>
			<wfw:commentRss>https://secret.internetwork.net/share/php-fsockopen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
