Heim >php教程 >php手册 >wamp本地测试环境下fopen url不能用的原因

wamp本地测试环境下fopen url不能用的原因

WBOY
WBOYOriginal
2016-05-27 08:47:431521Durchsuche

fopen一般情况是可以使用的,但是今天在测试一个打开远程文件时出了一些问题,最后还是解决了,而感谢而发写了这篇文章了,也就是总结了一下我找到的解决办法吧,希望对同样和我碰到fopen函数使用问题的朋友带来帮助,让大家也少走弯路了.

问题描述:allow_url_fopen = on

Whether to allow the treatment of URLs (like http:// or ftp://) as files.allow_url_include = on.Whether to allow include/require to open URLs

(like http:// or ftp://) as files.

在本地wamp测试环境中,这样设置以后,fopen可以正常打开远程地址,但遇到本地的地址却会报错,例如如下代码:

fopen("http://localhost/myfile.php", "r");

就会在超过php.ini中设置的脚本最长执行时间后报错,告知文件不存在等,这在在线服务器上是不会出现的,但如果将localhost替换成127.0.0.1,却可以正常工作.

从状况看,问题出在DNS解析上,按理说localhost已经自动被映射到127.0.0.1,实际上访问http://localhost和访问http://127.0.0.1也到达同一个地址.

解决的方法就是检查一下Windows的host文件,通常位于system32目录下,一个系统盘是C盘的host路径如下所示:

C:/Windows/System32/drivers/etc/hosts

打开hosts文件,用记事本或者notepad++等工具,将下面的127.0.0.1前面的#去掉即可,代码如下:

# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost

将url视为文件有什么用,比如给include的文件传值,可以这样,代码如下:

<?php
include &#39;http://yourdomain.com/
example.inc.php?foo=1&bar=2&#39;;
?>

在example.inc.php中,代码如下:

<?php 
var_dump($_GET[&#39;foo&#39;]); 
var_dump($_GET[&#39;bar&#39;]); 
//运行结果 
string(1) "1" string(1) "2"

补充一下:

fopen不能创建中文文件名文件的问题,之前网页的chartset用的是utf-8,文件也用utf-8,然后用fopen()创建一个中文文件名的文件时问题就出来了,文件名都是乱码.

查看了很多文档试了不少方法都解决不了,本来想着用别的方法绕过这个问题,忽然脑子里闪过Windows默认的文字编码是ansi,然后再 baidu了一下,证实了这点,所以我的网页也应该是ansi编码才能使创建的文件名不会是乱码.

接着就着手验证,把网页都用ansi保存,去掉chartset语句,果然ok了,但是网页的内容就成乱码了,后来想起,这个网页还include 了别的网页,把include的网页也改成ansi保存,哈哈万事ok.

编程这个工作真的很靠积累,如果我以前没看过Windows默认编码是ansi,那这个问题就不知何年何月才能解决了.

提示: 这个meta标记一定要放在

之前才有效的.

后来又想到了一个更好的解决方法,网页还是用utf-8编码和保存,只是fopen()里的文件名参 数单独给它编下码就行,php有iconv()这个改换编码的程序,把utf-8转成 gb2312就可以避免中文文件名为乱码了,test.htm代码如下:

<!DOCTYPE html> 
<html> 
<head> 
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"> 
<title>标题:{title}</title> 
</head> 
<body> 
<b>此新闻的内容:</b>{content} 
</body> 
</html>

test.php,代码如下:

<?php 
//实际应用中很可能是查询数据库取内容。 
$rows = array(array("替换标题1","替换内容1"),array("替换标题2","替换内容2")); 
$filename = "tmp.htm"; 
foreach($rows as $id => $val){ 
    $title = $val[0]; 
    $content = $val[1]; 
    $pagename = "测试".$id.".html";  
    //对文件名的编码,避免中文文件名乱码 
    $pagename = iconv("UTF-8", "GBK", $pagename);  
     
    //读取模板 
    $tmpfile = fopen($filename,"r"); 
    $string = fread($tmpfile,filesize($filename)); 
    $string = str_replace("{title}",$title,$string); 
    $string = str_replace("{content}",$content,$string); 
    fclose($tmpfile); 
    //写新文件 
    $newpage = fopen($pagename,"w"); 
    fwrite($newpage,$string); 
    fclose($newpage); 
} 
echo "创建成功!";

     


本文地址:

转载随意,但请附上文章地址:-)

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn