PHP is_writeable или открыт другой программой? - PullRequest
0 голосов
/ 04 апреля 2011

Я обычно открываю файл Microsoft Access и вижу, что он заблокирован Micorsoft Office. Затем я пытаюсь проверить, доступна ли запись с помощью PHP:

echo '|--> '.is_writeable('C:\wamp\www\Database1.accdb');

Но он возвращает 1. Surley, он должен возвращать 0 при открытии?

Просто, чтобы проверить, я тогда пытаюсь написать в него:

$fh = fopen('C:\wamp\www\Database1.accdb', 'w+');

fwrite($fh, 'hello');

Это позволяет мне сделать это! Можно ли в любом случае убедиться, что файл не открыт другой программой?

Ответы [ 3 ]

1 голос
/ 04 апреля 2011

Когда вы открываете документ Microsoft независимо от того, является ли он словом, power-point или файлом доступа, приложение создаст файл в том же каталоге, который помечен как скрытый, этот файл сообщает офисному приложению, что файл б.

файл, о котором идет речь, НЕ Заблокирован операционной системой, поэтому ОС не может определить, открывается ли файл приложением MS.

Что вам нужно сделать, это проверить, существует ли файл блокировки, и тогда вы сможете определить, открыт ли в данный момент документ связанным приложением.

Что-то вроде:

if(is_writeable("file.accdb") && !file_exists("file.lccdb"))
{
    touch("file.lccdb"); //mimic the file is being used

    /*
        * do Work
    */

    unlink("file.lccdb"); //Remove it
}
0 голосов
/ 04 апреля 2011

Ответ, не относящийся к MSAccess:

Программы должны блокировать файлы во время их открытия, чтобы другие программы не могли писать в них, если они не хотят такого поведения.Если программа, открывающая файл, не может этого сделать, вы не можете определить, открыл ли он файл, не написав код C / C ++, который использует функции WinAPI для определения, какие программы имеют активные файловые дескрипторы для вашего файла.

0 голосов
/ 04 апреля 2011

Вы можете проверить, открыт ли он с помощью Access, так как (по крайней мере, для баз данных 2007 года) Access помещает файл с расширением «laccdb» в ту же папку с тем же именем, что и база данных.Очевидно, что это может быть не так со всеми программами.

Если единственными программами, которые могут открыть его, являются Access и созданные вами, вы можете быть уверены, что каждый раз, открывая его, вы также создаетеФайл "database.laccdb" одновременно находится в одном и том же каталоге, а затем каждый раз, когда вы открываете его, проверяете, что файл не существует.Я думаю, что лучший способ - это просто проверить, есть ли файл блокировки, как если бы он был, тогда он, вероятно, открыт (если только программа, использовавшая его в последний раз, не забыла удалить его, например, при неожиданном завершении работы), и еслинет, тогда не должно быть никаких программ, читающих с него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...