2012-11-28 29 views
0

我遇到的問題是與fopen(),fwrite()和fclose()函數。這是我收到的錯誤:有一個問題備份我的數據庫從PHP

警告:fopen(/db-backup-salisbury_school-20121128-021138.sql)[function.fopen]:無法打開流:權限被拒絕在C:\ inetpub \ wwwroot \ omarejaz \ sbyschool \ q5.php上線177

警告:fwrite的()預計參數1是資源,在布爾C中給出:\的Inetpub \ wwwroot的\ omarejaz \ sbyschool \上線q5.php 178

警告:fclose()期望參數1是資源,布爾在C:\ inetpub \ wwwroot \ omarejaz \ sbyschool \ q5.php 179行上提供

這部分php的代碼可以是發現下面的任何幫助將不勝感激!

* Save SQL to file 
* @param string $sql 
*/ 
protected function saveFile(&$sql, $outputDir = '.') 
{ 
    if (!$sql) return false; 

    try 
    { 
     $handle = fopen($outputDir.'/db-backup-'.$this->dbName.'-'.date("Ymd-His", time()).'.sql','w+'); 
     fwrite($handle, $sql); 
     fclose($handle); 
    } 
    catch (Exception $e) 
    { 
     var_dump($e->getMessage()); 
     return false; 
    } 

    return true; 
} 

} ?>

+0

確保輸出目錄的權限設置正確。運行網絡服務器的用戶名必須具有寫入權限。 – rws907

+0

我真的不明白你的意思,你可以讓它變得更簡單一些。談到這一點,我很新。 –

回答

0

您需要設置$ outputDir爲 '/ tmp目錄' 或一些地方你的PHP腳本可以寫入。

如果腳本是從命令行運行的,運行該腳本的用戶需要寫入權限。如果它是從Web瀏覽器運行的,則apache或'nobody'需要寫入權限。使用chmod -R a+w <outputfolder>爲所有用戶設置寫入權限。

如果您沒有訪問到Web服務器,則可以使用FileZilla的按本視頻設置文件夾的權限:http://www.youtube.com/watch?v=oq0oM2w9lcQ

如果你能得到的文件使用的file_get_contents()的內容,只是呼應它到標準輸出。如果您不打印其他內容,您的瀏覽器將提示您下載該文件。

+0

我從網絡瀏覽器運行它,並且我只是將$ outputDir設置爲'tmp',但我不知道要爲所有用戶設置寫入權限的位置。 –

+0

您的臨時文件夾將取決於您的主機...如果您有ftp訪問權限,您可以使用filezilla或大多數ftp客戶端在用戶定義的文件夾上設置寫入權限。 – soulfreshner

+0

是的我正在使用filezilla,我正在嘗試將備份寫入到我的計算機上的一個文件夾中,這是可能的 –

1

我相信他正在運行Windows網絡服務器與IIS - 由C判斷:\ Inetput \ wwwroot目錄結構...所以在Windows,你需要這樣

接近它。如果你的腳本就設在這裏

C:\inetpub\wwwroot\omarejaz\sbyschool\q5.php 

然後,您需要在輸出目錄中使用適當的Windows目錄結構指定完整目錄。請記住,你可能不得不逃離自\,因爲在PHP \ is和轉義字符。

$OutputDir = "C:\\inetpub\\wwwroot\\omarejaz\\sbyschool\\tmp"; 

然後在Windows中,確保您在「tmp」文件夾中設置了適當的權限,以允許IIS寫入它。