2014-05-09 168 views
0

我正在研究需要PHP来创建文件和文件夹。我正在使用fopen来创建文件。但是,它似乎并不奏效。当我编写代码时,我在Windows上使用WAMP,并且一切正常,但是当我将该站点移动到Ubuntu服务器时,该脚本根本无法工作。fopen无法创建文件

这是我使用的文件创建和子平

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(); 
} 

什么脚本所做的是创建一个文件夹与一个随机数的会话ID和该文件夹内创建代码2个文件并压缩它们。请注意,文件夹已创建,但不包含

+3

您应该永远不要为简单的Web应用程序设置777权限。 – JakeGould

回答

0

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

mkdir($sessionid, 777); 

是不对的,你应该写

mkdir($sessionid, 0777); 
+0

谢谢!你发现了这个问题! –

+1

@MeletisFlevarakis通过将文件设置为'777',您将打开未来一系列其他问题的大门。 – JakeGould

+0

@JakeGould在我使用的某个主机上,需要设置为777,据我所知。甚至它不能通过脚本来设置,必须通过FTP手动设置 –

3

你的脚本有这样的:

mkdir($sessionid, 777); 

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

mkdir($sessionid, 0777); 

这就是说,你应该在PHP & Unix许可here阅读起来。一般来说,你的权限应该是从未有过由于任何原因被设置为777

当您设置权限777这意味着100%的人访问您的计算机上的任何水平可以readwrite & execute文件。这意味着如果您的网站遭到黑客入侵,那么黑客就不会使用执行权限来启动脚本,从而让系统更加深入。或者系统上的其他人 - 因为他们可以在你不知道的情况下简单地删除你的文件,因为他们可以read,write & execute

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

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

更加安全,稳健&实际的事情,一旦你的老板的问题的设置是权限到父文件夹设置为755并设置mkdir0755以及这样的:

mkdir($sessionid, 0755); 

只要文件的所有权固定为&,那么将目录设置为755并将文件设置为644是最好的方法。 644权限基本上分解如下

  • 第一6意味着文件可以read & write到它的拥有者。
  • 下一个4表示连接到该文件的组成员只能使用read它。
  • 下一个4意味着其他人 - 谁既不是集团的拥有者或成员 - 它可以read它。

至于755他们是最好的目录/文件夹,因为目录/文件夹,需要有execute权利,允许您查看他们里面的内容。因此,它打破了这样的:

  • 7意味着该文件可以readwrite & execute它的主人。
  • 下一个5表示连接到该目录/文件夹的组的成员只能使用read & execute它。
  • 未来5意味着其他人 - 谁既不是集团的拥有人或成员 - 只能read & execute它。