微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么is_可读和is_writable和file_exists的URL路径失败,而不是同一目录中的文件失败?

如何解决为什么is_可读和is_writable和file_exists的URL路径失败,而不是同一目录中的文件失败?

| 我搜索这个问题已经两天了,但实际上还没有找到能给我一个可靠答案的人。也许stackoverflow的天才可以帮助您? 我的难题:我正在尝试使用URL语法对指向服务器上文件的URL进行读写。 (请参见下面的代码)只要文件名与PHP文件位于同一目录并且我不使用任何URL套接字,代码就可以正常工作。 (即$ filename = \“ test.xml \”),但是,当我尝试添加URL套接字(即http://127.0.0.1/site_folder/text.xml)后,我在所有三个测试(is_可读, is_writable,file_exists)。为什么会这样呢?有没有一种方法可以更正它,以便我可以读写此文件? 我的设置:Microsoft Vista计算机上的Microsoft IIS 7.0.6000.16386上的PHP 5.3.2 PHP目录:c:\\ Program Files(x86)\\ PHP \\ 安全性:我已经为IUSR帐户设置了文件目录和文件本身的权限,以读取,写入,执行,列出目录。目前,此PHP文件与test.xml文件位于同一目录中。但我想使该URL正常工作,以便将来可以在其他目录中调整文件PHP.ini配置:我已经尝试了以下设置:
open_basedir=Off; 
fastcgi.impersonate = 1;
display_errors = On;
error_reporting = E_ALL & ~E_STRICT;
safe_mode = Off;
allow_url_fopen = Off; (and tried On,neither works);
allow_url_include = Off; (and tried On,neither works);
这是我的简单代码示例:
<?PHP
        $filename = \"http://127.0.0.1/sitename/admin/interface/test.xml\"; // this one fails
//      $filename = \"text.xml\" // this one works fine
    echo $filename;

        if (is_readable($filename)) {
                echo \"<br />The file is readable...<br />\";
        } else {
                echo \"<br />The file is not readable...<br />\";
        }

        if (is_writable($filename)) {
                echo \"The file is writable...<br />\";
        } else {
                echo \"The file is not writable...<br />\";
        }

        if (file_exists($filename)) { 
                echo \"File exists...<br />\";
        } else {
                echo \"File cannot be found...<br />\";
        }
?>
我得到的输出是:
http://127.0.0.1/sitename/admin/interface/test.xml
The file is not readable...
The file is not writable...
File cannot be found...
知道为什么会这样吗? 另外,在Macbook Pro上安装了Apache Server的PHP 5.3.2也发生了同样的事情。     

解决方法

        http://协议包装器不支持stat()系列功能(请参阅:http://php.net/manual/wrappers.http.php以了解受支持的功能)。 stat()支持对于file_exists,is_writable和is_可读而言是必需的。 file://协议包装器(在您的工作示例中使用的默认包装器)确实支持stat():http://php.net/manual/wrappers.file.php 您可以在此处阅读有关协议和包装的更多信息: http://php.net/manual/wrappers.php     ,        
$filename = \"//127.0.0.1/sitename/admin/interface/test.xml\";
您可以尝试更改此路径,例如
../../test.xml
或在相同目录中使用
test.xml
我试过了,解决了同样的问题     ,        如果要执行文件I / O,则传递实际路径(使用
$_SERVER[\'DOCUMENT_ROOT\']
可能有助于指定这些路径)。 PHP的
fopen
支持对URL的特殊处理,但其他文件I / O功能的包装器则不支持。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。