Home  >  Article  >  Backend Development  >  请教个fopensocket的问题

请教个fopensocket的问题

WBOY
WBOYOriginal
2016-06-23 13:54:111291browse

本地WAPM环境,php.ini有打开allow_url_fopen = On
write.php
$fp = fsockopen('localhost',80,&$errno,&$errstr,5); 
if(!$fp)

echo "$errstr ($errno)
\n"; 

else
{
fputs($fp,"GET / HTTP/1.0\nHost: http://localhost/1.php");
fclose($fp);
}
?>
在localhost根目录下存在1.php,但测试运行write.php后,
发现1.php并没有被执行,单独执行1.php是可以运行
请问为什么?
试过把http://localhsot/1.php改为1.php也不行;过程中没提示无法创建套链接


回复讨论(解决方案)

$fp = fsockopen('localhost', 80, $errno, $errstr, 5); if(!$fp) {   echo "$errstr ($errno)<br />\n"; }else {  fputs($fp,"GET /1.php HTTP/1.0\r\nHost: localhost\r\nConnection: Close\r\n\r\n");  while (!feof($fp)) {    echo fgets($fp, 128);  }  fclose($fp);}

$fp = fsockopen('localhost', 80, $errno, $errstr, 5); if(!$fp) {   echo "$errstr ($errno)<br />\n"; }else {  fputs($fp,"GET /1.php HTTP/1.0\r\nHost: localhost\r\nConnection: Close\r\n\r\n");  while (!feof($fp)) {    echo fgets($fp, 128);  }  fclose($fp);}


在本地测试的时候,其他电脑访问我这台电脑,用ip的方式可以正常执行,即假设我测试ip为192.168.10.60,
其他电脑使用http://192.168.10.60/write.php可以正常;
但把程序放到服务器上去,服务器ip假设为192.168.10.3,
运行却无法执行,需要把
连接方式变成192.168.10.3,然后fputs的时候,要写绝对路径才可以……这是啥情况?

这不是很正常吗?

你放到192.168.10.3
就不是localhost了,当然要用绝对ip访问,有什么问题?

这不是很正常吗?


两点不正常
1、以我本机为测试主机时,其他机器访问我本机,在使用localhost的时候可以正常运行;而把程序放到服务器时,我本机访问服务器就不行;
2、我说的写绝对路径是不是指fsocketopen建立链接时写,而是譬如当程序是放在web目录下的ca/ma目录下时,下面的
fwrite的路径要写192.168.10.3/ca/ma/1.php,即便我write程序与1.php程序是放置在同一目录下也需要这样。
但同样的这个现象我放在本地时,用其他电脑访问本地却正常。本地是win系统,服务器是linux系统,然道是因为OS的关系?

1、程序是在你的机器上运行的,所以用 localhost 能访问到是正常的,用你机器的 ip 能访问到也是正常的
2、当程序搬迁至服务器上时,按理说用 localhost 也是能访问到的,但由于服务器的特殊性可能没有做 127.0.0.1 到 localhost 的映射,那么就访问不到了。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn