1

ディレクトリが書き込み可能かどうかを確認するために使用している次の関数があります。

/**
 * check if the path is writable. if the path is a folder it creates a test file.
 *
 * @param string $path
 * @return boolean
 */
public static function is_writable( $path ) {
    //will work in despite of Windows ACLs bug
    //NOTE: use a trailing slash for folders!!!
    //see http://bugs.php.net/bug.php?id=27609
    //see http://bugs.php.net/bug.php?id=30931
    if ( $path{strlen($path)-1} === DIRECTORY_SEPARATOR ) {// recursively return a temporary file path
        return self::is_writable( $path . uniqid( mt_rand() ) . '.tmp' );
    } else if ( is_dir( $path ) ) {
        return self::is_writable( $path . DIRECTORY_SEPARATOR . uniqid( mt_rand() ) . '.tmp' );
    }
    $file_already_exists = file_exists( $path );
    // check tmp file for read/write capabilities
    $f = @fopen( $path, 'a');
    if ( $f === false ) {
        return false;
    }
    if ( ! $file_already_exists ) {
        unlink( $path );
    }
    return true;
}

unlink()これは、ファイルを削除する権限がないため、最近まで常に警告が表示されるまで常に正常に機能していました。しかし、一時ファイルは正常に作成されるため、ディレクトリに書き込むことができます。

警告: unlink(C:\Program Files (x86)\Zend\Apache2\htdocs\wordpress\wp-content\plugins\all-in-one-event-calendar-premium\cache\152006398050813468bb6ec.tmp) [function.unlink] : C:\Program Files (x86)\Zend\Apache2\htdocs\wordpress\wp-content\plugins\all-in-one-event-calendar-premium\lib\utility\class-ai1ec-filesystem-utility で許可が拒否されました.php 35 行目

これはどのように可能ですか?テストしているディレクトリに 777 を指定しようとしましたが、それでも警告が表示されます! Zendサーバーを搭載したWindows 7を使用しています

4

4 に答える 4

0

C:\Program Files (x86) は、保護されたシステム ディレクトリです。エクスプローラーでファイルをそこにドラッグしてみてください。UAC プロンプトを無視して、必要な権限を取得する必要があります。

ファイル システムのこの部分に PHP スクリプトを書き込みまたは削除する場合は、管理プロンプトからスクリプトを実行する必要があります ([スタート] メニューを開き、検索ボックスに「cmd」と入力し、cmd を右クリックします)。コマンドを実行し、「管理者として実行」を選択します)。

そのプロンプトから PHP スクリプトを呼び出すと、そのフォルダーへの書き込みや削除を行うすべての権限が与えられ、通常、スクリプトが適切と思われる場所ならどこでもシステムに大混乱をもたらします ;)

他の人が述べたように、chmod() は Windows では意味がなく、何もしません。それは* nixのことだけです。

于 2012-10-19T11:40:55.537 に答える
0

リンクを解除しようとすると、ファイルが存在しません。ここを見て:

if ( ! $file_already_exists ) { //TRUE if file does not exist.
    unlink( $path );
}

file_exist が FALSE の場合に機能します

于 2012-10-19T11:22:22.107 に答える
-1

通常、Windows 7 の c:\ では、任意のファイルを追加/削除するために管理者の書き込みが必要です。Apache のユーザーに管理者の書き込みを与えるか、htdocs フォルダーに 777 のアクセス許可を与えるか、apache docrot を c:\ の外に移動します。

于 2012-10-19T11:19:32.983 に答える