| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Сеть > PHP считает файл папкой и пытаеться в него зайти |
| Автор: Ddima 19.4.2006, 14:10 |
| Люди, такой к вам вопрос: У меня скрипт сканит по локальной сети компы.Он рекурсивно азаходит в каждую папку и просматривает содержимое. и все бы хорошо, но обнаружилась проблема: некоторые файлы( мной в частности обнаружен файл .ppt) почему то считает папками и пытаеться в них зайти. происходит слеюующее: он находит какой то вложенный в эту папку файл 1.jpg - считает его тоже папкой и снова в него заходит, потом снова и снова. Пока не зависает скрипт. функции is_dir и filetype не помогают - он определяет файл как папку С чем это может быть связано и как это можно обойти? |
| Автор: Ciber SLasH 19.4.2006, 14:35 |
| Функции is_dir, is_file — кэшируются. В начале всех этих операций поставь clearstatcache() |
| Автор: Ddima 20.4.2006, 05:55 |
| не помогло ((( нашел еще один глючный файл - он сохранен в content.ie5. Это doc. название в формате : "/%D0%BF%D0%BB%D0%B0%D0 . . ." не открываеться не изменяеться имя, не удаляется. Такие файлы, как видимо есть почти на всех сканруемых машинах . . . |
| Автор: Ciber SLasH 20.4.2006, 07:37 | ||
Тогда проверяй так:
|
| Автор: Ddima 20.4.2006, 10:19 |
| Тоже не помогло fileperms для этих файлов возвращает те же значения что и для папок(остальные права совпадают). может как то искусственно можно проверить, например по какому нибудь параметру, который есть у файлов и нет у папок или наоборот. |
| Автор: Ciber SLasH 20.4.2006, 10:51 |
| Может в архиве выложишь тестируемые файлы, чтобы можно было бы независимый эксперимент провести? |
| Автор: Ddima 20.4.2006, 11:17 |
| Это какие то глючные файлы. Я скопировал папку, содкржащую файл, на свою машину - они нормально стали открываться, и видятся как файлы. а на чужой машине, я конкретно этот файл не могу ни скопировать, не удалить - ни че с ним не могу сделать, даже свойства посмотреть. |
| Автор: Ciber SLasH 20.4.2006, 11:23 |
| Так это файлы типа ntuser.dat, к которым запрещён доступ даже на чтение? |
| Автор: smartov 20.4.2006, 11:24 |
| Наверное еще и винда 98-я.... |
| Автор: Ddima 20.4.2006, 11:29 |
| Винда 2000 sp4. подобные файлы встречаются на очень многих машинах - разные расширения. |
| Автор: Ciber SLasH 20.4.2006, 11:33 |
| Попробуй к имени файла перед проверкой применять функцию urldecode('<имя файла>'); |
| Автор: Ddima 20.4.2006, 13:06 |
| Ет как? Он название если декодирует, то найти тогда такой файл не может |
| Автор: Ciber SLasH 20.4.2006, 13:17 |
Тогда не знаю... |
| Автор: Ddima 20.4.2006, 13:33 |
| все равно пасиба. |
| Автор: Ciber SLasH 20.4.2006, 13:45 |
| А что, если запустить через PHP команду DOS dir /a и парсить вывод этой команды. А имена проверять на символ процента (с процентами ведь глюки идут? это вобще-то запрещённые символы, из-за этого может и быть трабла), если встретили в имени процент, запускаем dir /a и смотрим, что нам эта команда говорит на этом файле. Покажи вывод dir /a в том каталоге. |
| Автор: Medwoodu 20.4.2006, 15:23 |
| Возможно стоит так же проверить атрибуты данных файлов? |
| Автор: Ciber SLasH 20.4.2006, 21:35 |
| Ещё есть функция filetype(), которая возвращает тип файла, в типах присутствуют также file и dir. Только перед вызовом нужно вызвать clearstatcache(), т.к. эта результат этой функции кэшируется. |
| Автор: smartov 21.4.2006, 11:05 |
| Я практически уверен что все эти функции работают одинакоао просто проверяя аттрибут файла - является ли он директорией. Думаю разницы никакой не будет... Имя файла просто невалидное. Так бывает. IE например частенько создает файлы, которые даже средствами самой винды (explorer) а так же TC или Far не удалить. Вот так. Приходится заходить в папку и делать c:\temp>erase *.* Так удаляет. А по другому с такими файлами ничего не сделаешь. Вот такое мегатворение от Майкрософт. |
| Автор: Janus 21.4.2006, 15:21 |
| По-моему, это просто Windows не разрешает. В этих папках копаться - себе дороже, программисты Windows там такого намутили! Система как-то по особому себя ведет с этими каталогами и с файлами внутри них. Вполне возможно, что это даже и не файлы, а ссылки на файлы. P.S. А файловая система-то какая? |
| Автор: Ddima 24.4.2006, 11:14 |
| Я тож думаю, что все эти функции просто проверяют атрибуты. пробовал и filetype() - тож самое. я подумал так - если не могу предотвратить - то буду бороться со следствиями этой ошибки. пришлось сделать так - если он начинает в файл заходить - много раз подряд - я это просто отслеживаю и возвращаю функцию на то место, где он начал глючить. Начинаю со следующего файла. Так оно конечно коряво, но как бы пока что другого выхода я не нашел, а так вроде работает. )) Добавлено @ 11:18 Файловая система NTFS, а ссылки filetype возвращает link |
| Автор: Janus 24.4.2006, 19:53 |
| Ну дык сделай проверку на link, и, ежели это link, то просто игнорируй! |