2016-08-28 17 views
1

私は問題に取り組んでいます。私は、スタンドアロンアプリケーションとして実行することができます。このスクリプトに例を剥奪:php mkdir(ウィンドウ)で「許可が拒否されました」がランダムに発生しました

<?php 
if(file_exists("x")){ 
    print "<div>Deleting dir</dir>"; 
    rmdir("x"); 
} else { 
    print "<div>Not exists</dir>"; 
} 
clearstatcache(); 
mkdir("x"); 

私は(ブラウザでF5)を繰り返し、それを呼び出す場合は、時々、このエラーが発生します。

Deleting dir 
Warning: mkdir(): Permission denied in F:\EclipseWorkspaces\Ramses\www\deploy\stripped_example.php on line 9 

10-20それが正常に動作し、次回このエラーが発生する回数。私はより多くのユーザーがこの問題を持っているが、解決策はないとGoogle検索しました。
https://github.com/getgrav/grav/issues/467
私は、誰かが完全に制御できるcwdにディレクトリを作成します。さらに、mkdir $ modeパラメータはウィンドウで無視されます。エラーの後、 "x"ディレクトリは本当に存在せず、次の試行(F5)では常にエラーなしで作成されます。私は後で飛び越した "clearstatcache()"が助けになるだろうが、追加されません。

私の完全なアプリケーションでは、完全なファイルパスを使用しています。削除されたディレクトリは空ではありません。最初に削除する必要があります。エラーが正常に削除された後は、ほとんどの場合、エラーが発生します。

私のシステムがWindows 7、PHP 7.0.5では、Apache 2.4

+1

なぜこのコードであなたのリフレッシュボタンを叩くのですか?おそらく '競合状態(https://en.wikipedia.org/wiki/Race_condition) 'を作成しています。つまり、' mkdir'が呼び出されたときに、同じスクリプトの別のインスタンスが同時に実行されているためにディレクトリが既に存在することがあります。 – Chris

+0

私はF5を永久に押さないでください。ページがエラーなしで完了した後、F5キーを押してこのエラーのランダムな文字を証明しようとします。 – Hink

+0

最新バージョンのPHP 7.0.10をインストールするのが早すぎましたが、それは助けになりませんでしたが、アプリケーションでの発生が100%から約30%に減少しました。 – Hink

答えて

0

は、既存の追加のチェックを使用してコードを試してみてください。

<?php 
if(is_dir("x")){ 
    print "<div>Deleting dir</dir>"; 
    rmdir("x"); 
} else { 
    print "<div>Not exists</dir>"; 
} 
clearstatcache(); 
if (!is_dir("x")) { 
    mkdir("x"); 
} 
+0

"x"ディレクトリは本当に存在しないので、is_dir()は常にfalseを返します。これはほとんどが剥奪された例です。アプリケーションでは、ディレクトリのファイルタイプをテストしています。 – Hink

1

Windowsが別のプロセスがアクセスしている場合、あなたは物事を削除することはできません。それら。

あなたのウイルス対策または他のプロセスがフォルダを開いているかどうかを確認してください。

これはリソースモニタのタスクマネージャから確認できます。

0

Windows 10、Xampp、PHP 7で同じ問題が発生しました。問題はKaspersky Internet Securityで、ディレクトリをスキャンしてブロックしていました。 KISを無効にするmkdirは常に私のために働きます。直接再作成する代わりに、renameを試すことができます。セキュリティソフトウェアを無効にすることはオプションではありません。

$time = time(); 
mkdir($path . $time); 
rename($path . $time, $path); 
関連する問題