在PHP中使用内部URL进行fopen

时间:2017-02-26 21:42:30

标签: php url fopen

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

  

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

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

$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。

谢谢!

1 个答案:

答案 0 :(得分:2)

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

根据the http:// stream wrapper的“选项”表格 - 不支持写作 虽然HTTP协议确实有像PUT这样的方法用于编写,但在绝大多数情况下,Web(至少在HTTP级别)只读给用户。

除此之外,如果您正在本地计算机上编辑文件,那么就没有任何理由可以涉及与网络相关的任何内容,无论是复杂性,性能还是安全性。所以,请使用“相对”方法 - 相对于您当前的工作目录而不是任何 URL