fopen无法创建文件

时间:2014-05-09 15:01:49

标签: php fopen

我正在开发一些需要PHP制作文件和文件夹的东西。我正在使用fopen来创建文件。但是,它似乎不起作用。当我编写代码时,我在Windows上使用WAMP,一切正常,但是当我将网站移动到Ubuntu服务器时,脚本根本不起作用。

这是我用于在文件和ziping上创建的代码

mkdir($sessionid, 777);

// create the server.properties
$server_config = fopen("$sessionid/server.properties",'a');
$config = "test";
fwrite($server_config,$config);
fclose($server_config);

// create the run.sh/bat
$server_script = fopen("$sessionid/RUN.$platform", 'a');
fwrite($server_script,$script);
fclose($server_script);

// zip them all together
$zip = new ZipArchive();

$ow = 1;
$file= "$sessionid/RFSLABSserver.zip";
if($zip->open($file,$ow?ZIPARCHIVE::OVERWRITE:ZIPARCHIVE::CREATE)===TRUE)
{
    // Add the files to the .zip file
    $zip->addFile("/$sessionid/server.properties", "server.properties");   
    $zip->addFIle("/$sessionid/RUN.$platform", "Start.$platform");
    // file source as file name

    $zip->close();
}

脚本的作用是使用sessionid创建一个文件夹,该文件夹是一个随机数,在该文件夹中创建2个文件并压缩它们。请注意,文件夹已创建,但不是

中的文件

2 个答案:

答案 0 :(得分:3)

你的脚本有这个:

mkdir($sessionid, 777);

但应该是这样;请注意0前面的777

mkdir($sessionid, 0777);

那就是说,你应该阅读PHP& Unix权限here。一般情况下,您的权限永远不会因任何原因设置为777

当您将权限设置为777时,这意味着100%有权访问任何级别的计算机的人都可以readwrite& execute文件。这意味着如果您的网站被黑客入侵,那么黑客就会使用执行权限来启动脚本以深入了解您的系统。或系统上的其他人 - 因为他们可以readwrite& execute文件可以在您不知道的情况下删除您的文件。

您应该看看您尝试创建$sessionid的目录的所有者是谁。文件或目录/文件夹的所有者是解决此类问题的关键。然后chmod权限需要符合文件所有者的需要。

您尝试执行此操作的父目录的所有者应与现在系统上通常为www-data的Apache Web服务器用户相同。因此,您尝试创建$sessionid文件的父文件夹应由www-data拥有并拥有readwrite& execute权限设置等同于7

更安全,更理智和更安全实际的事情 - 一旦你拥有所有者问题集 - 是将该父文件夹的权限设置为755并将mkdir设置为0755,如下所示:

mkdir($sessionid, 0755);

将目录设置为755并将文件设置为644是最好的方法,只要文件的所有权是可靠的&正确。 644权限基本上如下所示

  • 第一个6表示文件的所有者可以read& write到它。
  • 下一个4表示与该文件相关联的群组成员只能read
  • 下一个4表示其他人 - 既不是所有者也不是群组成员 - 可以read

对于755,它们最适合目录/文件夹,因为目录/文件夹需要execute权限才能查看其中的内容。所以它就像这样崩溃了:

  • 第一个7表示文件的所有者可以readwrite& execute它。
  • 下一个5表示连接到该目录/文件夹的群组成员只能read& execute它。
  • 下一个5表示其他人 - 既不是所有者也不是群组成员 - 只能read& execute它。

答案 1 :(得分:0)

您应该尝试为目录设置适当的权限。

mkdir($sessionid, 777);

错了,你应该写

mkdir($sessionid, 0777);