2015-09-17 26 views
1

我試圖運行一個腳本,該腳本創建頁面並將其保存到服務器 但我在public_html中的某個文件上獲取權限錯誤目錄。嘗試在public_html中創建頁面時拒絕打開流權限

因此,2個頁面在「pages」目錄下創建,它是chmod到0777,它們創建的很好。 第三頁在「public_html」目錄中創建,失敗且您沒有權限。 我發現解決這個問題的唯一方法是chmod「public_html」目錄爲0770然後 一切正常,但我一直強烈建議託管公司不要做這種安全風險的浪費。

所以我的問題是,有沒有其他途徑來實現這一目標? 看着它有點看起來像我需要給劇本「用戶」priviliges可能工作,但這是我目前超出我的知識。 我真的甚至不知道在腳本運行爲此刻什麼,我猜「組」爲chmoding的的public_html 到0770允許「組」

我的設置是:VPS服務器上運行的CentOS 6.7 CENTOS x86_64的

PHP 5,DSO,Apache的suEXEC的對我使用

簡化的代碼是:

$page_path = "/home/username/public_html/"; 
$loop[Html_Name] = "test.html"; 
$new_page_file = "test.html"; 


$fp = fopen($page_path.$loop[Html_Name], "w"); 
fwrite($fp, $new_page_file); 
fclose($fp); 
chmod($page_path.$loop[Html_Name], 0666); 

提前非常感謝。

+0

您還可以檢查PHP的安全模式和open_basedir設置。如果他們被啓用,他們可能也會造成這種情況。 – CntkCtn

回答

0

通常,我們在這些情況下使用ftp。/public_html權限可能會保持爲750並運行此代碼。

$server = 'localhost'; 
$ftp_user_name = 'username'; 
$ftp_user_pass = 'passw'; 
$dest = 'public_html/new.file'; 
$source = '/home/username/public_html/path/to/existing.file'; 

$connection = ftp_connect($server); 
$login = ftp_login($connection, $ftp_user_name, $ftp_user_pass); 
if (!$connection || !$login) { die('Ftp not connected.'); } 
$copied = ftp_put($connection, $dest, $source, FTP_BINARY); 
if ($copied) { 
    echo 'File copied'; 
} else { 
    echo 'Copy failed!'; 
} 
ftp_close($connection); 

用的public_html最終目的地的頁面可以在其他目錄中創建,然後該腳本將在的public_html複製。舊文件將保留,如果具有相同目的地名稱的文件將被覆蓋。
$ dest是用戶主目錄的相對路徑。 $源是絕對路徑。
如果ftp被filezilla等同時使用,連接將會失敗。解決方案是在cPanel中創建第二個ftp用戶帳戶。

+0

lgor Greg,非常感謝能夠完成這項工作,但這真的是唯一的方法......看起來像是一個非常糟糕的事情。 – user3696845

+0

@ user3696845具有0777模式的目錄即使是其頁面的訪問者也是可寫的。在共享主機上,0770模式的目錄可由服務器上的其他用戶寫入。出於這個原因,最好通過ftp進行身份驗證來寫入服務器的公共部分,而不是調整權限。 –

+0

非常感謝,只是一個問題......有人仍然需要訪問您的服務器來修改文件嗎?如果您有一個子文件夾設置爲0777,這是否具有完全相同的風險? – user3696845

相關問題