【问题标题】:php won't create filephp不会创建文件
【发布时间】:2014-04-18 11:16:53
【问题描述】:

所以我尝试使用 fopen(file, w) 用 php 创建一个文件。但它返回一个错误。然而这只是在服务器端,当我在 localhost(XAMPP) 上运行它时它工作正常

代码如下

function createdatafile(){
//Rolls a random number which will be the file name.
$x = rand(0, 9999999);
$file = "Datafiles/".$x.".csv";
if(!file_exists($file)){
    $nfile = fopen($file, "w") or die("cannot create file: $file ");//fails 
    //createdata() just returns a string. However this doesnt even get executed.
    fwrite($nfile, createdata());
    fclose($nfile);
}else{
    //calls itself for another roll if the file already existed.
    $this->createdatafile();
}}

这段代码在本地主机上运行,​​但不在服务器上。我尝试了很多不同的事情和以前的问题给出的解决方案,但都没有奏效。但是在尝试附加到现有文件之后,很明显它可以找到该文件,因此不是文件路径错误。它只是拒绝打开文件。所以我的文件夹结构如下。

/phpscripts.php
/Datafiles/Data.csv
/files/images.png <--- tried moving the file here didn't work either.

我可以从中得出的唯一结论是服务器不允许 php 写入和打开文件,但我不知道为什么或如何更改这一点。那么有谁知道如何解决这个问题。

【问题讨论】:

  • 检查文件夹的读写权限
  • 权限与用户相关。 php不是用户。服务器不允许来宾读取/写入此文件夹。

标签: php file fopen


【解决方案1】:

我认为这是用户权限错误。确保您的 httpd 用户对您尝试写入的文件/目录具有写入权限。可以肯定的是,您应该启用日志记录并检查 php 在尝试 open($f, 'w') 时抛出的警告。

再次假设这是一个权限错误并且这是一个 linux 服务器,您应该执行 chown httpduser:httpduser /Datafiles/ 然后是 chmod u+w /Datafiles/chmod g+w /Datafiles/

【讨论】:

  • 允许访客写入文件夹通常是严重的安全漏洞。如果编码人员不知道这一点,那么他/她很可能无法创建一个安全的环境,也不应该向来宾用户开放写权限。
  • @tonygil 请告知如何设置具有 OP 给定要求的环境(将文件写入磁盘)没有授予目录写入权限?这不是安全漏洞,而是唯一的方法。
  • 好吧,因为不建议更改这些设置并且它应该是公开的,所以我决定改用邮件服务器并邮寄数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多