php - 为什么 is_readable & is_writable & file_exists 对于 URL 路径会失败而不是对于同一目录中的文件?

标签 php file-io file-permissions

我已经用谷歌搜索这个问题两天了,真的没有找到任何人可以给我一个可靠的答案。也许 stackoverflow 的天才们可以提供帮助?

我的难题:我正在尝试使用 URL 语法来读取和写入文件,该 URL 指向我服务器上的文件。 (参见下面的代码)只要文件名与 php 文件位于同一目录中并且我没有在其上使用任何 URL 套接字,代码就可以正常工作。 (即 $filename = "test.xml")但是一旦我尝试添加 URL 套接字(即 http://127.0.0.1/site_folder/text.xml ),我在所有三个测试(is_readable、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...

知道为什么会这样吗? 附带说明一下,在我的装有 Apache 服务器的 Macbook Pro 上,PHP 5.3.2 也发生了同样的事情。

最佳答案

http://协议(protocol)包装器不支持 stat() 函数系列(请参阅:http://php.net/manual/wrappers.http.php 了解支持的内容)。 stat() 支持对于 file_exists、is_writable 和 is_readable 是必需的。

file://协议(protocol)包装器(默认的,在您的工作示例中使用)确实支持 stat(): http://php.net/manual/wrappers.file.php

您可以在此处阅读有关协议(protocol)和包装器的更多信息: http://php.net/manual/wrappers.php

关于php - 为什么 is_readable & is_writable & file_exists 对于 URL 路径会失败而不是对于同一目录中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6353197/

相关文章:

python - Apache 创建文件 : how to control permissions

c# - exe 文件无法从 IIS 创建 txt 文件

java - 无法初始化类 com.sun.jna.Native

php - 如何将 i18n 用于一种语言 cakephp

php - Android JSON解析返回null

java - 如何用 Java 编写 UTF-8 文件?

c++ - 在 C++ 中重载 ifstream

php - SQLSTATE[HY000] [2002] 没有那个文件或目录

php - 令人困惑的 PHP OO 场景

c++ - 读取和写入许多文本文件