0

私が抱えている問題は、fopen()、fwrite()、および fclose() 関数にあります。これは私が受け取っているエラーです:

警告: fopen(/db-backup-salisbury_school-20121128-021138.sql) [function.fopen]: ストリームを開くことができませんでした: C:\inetpub\wwwroot\omarejaz\sbyschool\q5.php 行 177 で許可が拒否されました

警告: fwrite() は、パラメーター 1 がリソースであると想定します。178 行目の C:\inetpub\wwwroot\omarejaz\sbyschool\q5.php で指定されたブール値です

警告: fclose() は、パラメーター 1 がリソースであると想定し、179 行目の C:\inetpub\wwwroot\omarejaz\sbyschool\q5.php で指定されたブール値です

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

} ?>

4

2 に答える 2

1

彼はIISでWindowsWebサーバーを実行していると思います-C:\ Inetput \ wwwrootディレクトリ構造から判断すると...Windowsでは、この方法でアプローチする必要があります

スクリプトがここにある場合

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

次に、出力ディレクトリで適切なWindowsディレクトリ構造を使用して完全なディレクトリを指定する必要があります。PHPでは\isとエスケープ文字なので、\'sをエスケープする必要がある場合があることに注意してください。

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

次に、Windowsで、IISが書き込みできるように、「tmp」フォルダーに適切なアクセス許可が設定されていることを確認します。

于 2012-11-28T15:21:12.897 に答える
0

$outputDir を「/tmp」または PHP スクリプトが書き込み可能な場所に設定する必要があります。

スクリプトをコマンド ラインから実行する場合、スクリプトを実行するユーザーには書き込み権限が必要です。Web ブラウザーから実行する場合、apache または 'nobody' には書き込み権限が必要です。

chmod -R a+w <outputfolder>すべてのユーザーの書き込み権限を設定するために使用します。

Web サーバーにアクセスできない場合は、次のビデオに従って filezilla を使用してフォルダーのアクセス許可を設定できます: http://www.youtube.com/watch?v=oq0oM2w9lcQ

file_get_contents() を使用してファイルの内容を取得し、それを標準出力にエコーできる場合。他に何も印刷しない場合は、ブラウザからファイルをダウンロードするように求められます。

于 2012-11-28T02:31:40.940 に答える