我正在开发一些需要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个文件并压缩它们。请注意,文件夹已创建,但不是
中的文件答案 0 :(得分:3)
你的脚本有这个:
mkdir($sessionid, 777);
但应该是这样;请注意0
前面的777
:
mkdir($sessionid, 0777);
那就是说,你应该阅读PHP& Unix权限here。一般情况下,您的权限永远不会因任何原因设置为777
。
当您将权限设置为777
时,这意味着100%有权访问任何级别的计算机的人都可以read
,write
& execute
文件。这意味着如果您的网站被黑客入侵,那么黑客就会使用执行权限来启动脚本以深入了解您的系统。或系统上的其他人 - 因为他们可以read
,write
& execute
文件可以在您不知道的情况下删除您的文件。
您应该看看您尝试创建$sessionid
的目录的所有者是谁。文件或目录/文件夹的所有者是解决此类问题的关键。然后chmod
权限需要符合文件所有者的需要。
您尝试执行此操作的父目录的所有者应与现在系统上通常为www-data
的Apache Web服务器用户相同。因此,您尝试创建$sessionid
文件的父文件夹应由www-data
拥有并拥有read
,write
& execute
权限设置等同于7
。
更安全,更理智和更安全实际的事情 - 一旦你拥有所有者问题集 - 是将该父文件夹的权限设置为755
并将mkdir
设置为0755
,如下所示:
mkdir($sessionid, 0755);
将目录设置为755
并将文件设置为644
是最好的方法,只要文件的所有权是可靠的&正确。 644
权限基本上如下所示
6
表示文件的所有者可以read
& write
到它。4
表示与该文件相关联的群组成员只能read
。4
表示其他人 - 既不是所有者也不是群组成员 - 可以read
。对于755
,它们最适合目录/文件夹,因为目录/文件夹需要execute
权限才能查看其中的内容。所以它就像这样崩溃了:
7
表示文件的所有者可以read
,write
& execute
它。5
表示连接到该目录/文件夹的群组成员只能read
& execute
它。5
表示其他人 - 既不是所有者也不是群组成员 - 只能read
& execute
它。答案 1 :(得分:0)
您应该尝试为目录设置适当的权限。
mkdir($sessionid, 777);
错了,你应该写
mkdir($sessionid, 0777);