2011-12-16 3 views
2

Я выполняю синтаксический анализ csv, и если я отменяю синтаксический анализ (путем перехода на другую страницу или обновление) до вызова функции fclose() Я получаю ошибку ниже, когда я иду назад и запустить программу снова:PHP Доступ к файлу, который был заблокирован для редактирования - Ошибка разрешения отказа

Warning: unlink(spreadsheet.csv) [function.unlink]: Permission denied 

при попытке открыть файл spreadsheet.csv в Excel, я получаю «файл используется» ошибки, говоря «таблицу. csv заблокирован для редактирования «другим пользователем». «Я понимаю, что мой php-сервер в настоящее время застревает в состоянии попыток доступа к файлу. Есть ли способ, которым я могу использовать php для проверки того, заблокирован ли файл для редактирования и разблокировать его?

+0

http://php.net/manual/en/function.flock.php –

ответ

0

Вы можете попытаться разблокировать файл с PHP как это:

$rFile = fopen("path/file.txt", "r+"); 
flock($rFile, LOCK_UN); 
fclose($rFile); 

И самый лучший способ, чтобы получить доступ на чтение и запись в файл это :

$iOldumask = umask(0); 
chmod("path/file.txt", 0777); 
umask($iOldumask); 
+0

хороший совет, но я понял мою проблему. Моя веб-страница использует вызов ajax для возврата данных из очень длинного сценария php, поэтому даже если я рано выйду из страницы, этот php-скрипт все еще выполняется. Есть ли способ, которым я могу сказать серверу перестать пытаться выполнить предыдущий запрос ajax, если в фоновом режиме все еще работает? – user954912

+0

Да, посмотрите [здесь] (http://stackoverflow.com/questions/446594/kill-ajax-requests-using-javascript-using-jquery) – noob

0

Посмотрите на flock().

Я использую его как:

if (!$file->flock(LOCK_EX)) { 
    throw new Exception('Unable to obtain lock on file'); 
}