【问题标题】:fopen with Internal URL in PHP在 PHP 中使用内部 URL 的 fopen
【发布时间】:2017-02-26 21:42:30
【问题描述】:

我们最近更改了文件夹 (Windows Server 2012 R2 / IIS) 的权限,以适应使用 PHP 编写文本文件。当我们使用相对路径时,我们可以编写测试文件,但是如果我们尝试使用 $url 会话变量或 URL 本身,它会失败(我们的 URL 不是公共的,而是在私有内部网络上):

PHP 警告:fopen(txt/newfile.txt):无法打开流:第 3 行 C:\inetpub\wwwroot\folder\file.php 中的权限被拒绝

第 3 行(更改 URL 以保护隐私):

$myfile = fopen("http://11.11.11.11/folder/txt/newfile.txt", "w") or die   
("Unable to open file!");

这是可行的:

$myfile = fopen("txt/newfile.txt", "w") or die   
("Unable to open file!");

我检查了 php.ini 和 allow_url_fopen = On。我可以要求开发人员使用相对路径,但如果我们愿意,我很想知道这里发生了什么以及如何使用 URL。

谢谢!

【问题讨论】:

  • 我真的不知道如何回答这个问题,只是因为你不能这样做。

标签: php url fopen


【解决方案1】:

在 PHP 中,fopenfile_get_contents 等函数中对 http://ftp:// 等协议的支持由所谓的 "stream wrappers" 实现。

根据the http:// stream wrapper 的“选项”表 - 不支持写入。
虽然 HTTP 协议确实有像 PUT 这样的方法,这些方法是为编写而设计的,但在绝大多数情况下,网络(至少在 HTTP 级别)对其用户是只读的。

除此之外,如果您在本地计算机上编辑文件,则根本没有充分的理由涉及任何与网络相关的内容,无论是出于复杂性、性能还是安全性的考虑。因此,只需使用“相对”方法 - 这将相对于 您当前的工作目录,而不是任何 URL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多