2014-05-09 216 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它。