|
|
|
| Была ужа такая тема, и даже пример... но есть две проблемы. В старую тему невозможно написать, посему решил создать новую.
Вторая проблема заключалась в том, что предоставленный сканер не переходил по "сложным каталогам", тоесть по тем, в названиях которых есть спец. символы, например [ ]. Написав автору темы, ответа не долждался, поэтому решил внести изменения сам. Итак:
<?php
require_once("config.inc.php");
$root = "/pub/VIDEO/";
scanftp($link, $root);
ftp_close($link);
echo "<pre>";
print_r($file);
echo "</pre>";
function scanftp($link, $root)
{
GLOBAL $file;
// $dir_list = ftp_rawlist($link, $root);
ftp_chdir($link, $root.$directory);
$dir_list = ftp_rawlist($link, ".");
foreach ($dir_list as $path) {
$output = explode(":", $path);
$left = $output[0];
$directory = substr($output[1], 3);
if (substr($directory, 0, 1) == '.') continue;
if (substr($left, 0, 1) == 'd') {
scanftp($link, $root.$directory."/");
}
if(substr($left, 0, 1) == '-') {
if(substr($directory, -3) == 'avi') {
$file[] = $directory." #-# ".$root.$directory;
}
}
}
}
?>
|
(конфиг как и в прошлом примере по адресу: http://www.softtime.ru/scripts/ftpscaner.php)
Данный пример сканирует рекурсивно каталог /pub/VIDEO на одном из серверов. Внутри ещё 2-3 уровня, вроде все хорошо. Тем не менее при попытке сканировать из корня, а именно /pub/, скрипт высыпает ошибками, что странно...
Warning: Invalid argument supplied for foreach() in /home/www/filmdb/ftp/index2.php on line 20
Warning: ftp_chdir(): PORT command successful in /home/www/filmdb/ftp/index2.php on line 17
Warning: Invalid argument supplied for foreach() in /home/www/filmdb/ftp/index2.php on line 20
Warning: ftp_chdir(): POSLE not understood in /home/www/filmdb/ftp/index2.php on line 17
Warning: Invalid argument supplied for foreach() in /home/www/filmdb/ftp/index2.php on line 20
Warning: ftp_chdir(): OSLE not understood in /home/www/filmdb/ftp/index2.php on line 17
Warning: ftp_chdir(): E not understood in /home/www/filmdb/ftp/index2.php on line 17
Warning: Invalid argument supplied for foreach() in /home/www/filmdb/ftp/index2.php on line 20
Warning: ftp_chdir(): Invalid command: try being more creative in /home/www/filmdb/ftp/index2.php on line 17
и далее по списку... причем видно, что коверкует команду PORT подставляя куски, похоже, из названий папок, и вызывая при этом ошибку цикла.
И ещё одно, пробовал сканировать директорию с большим количеством видео файлов (около 500). Сначала ругался на лимит памяти, поднял до 128, но результат работы скрипта - пустая страница. Ладно, думаю, попробовал просканировать папку с музыкой. Результат - более 2000 удачных вхождений и принт полного массива...
Если кому интересно, давайте разберемся вместе :) | |
|
|
|
|
|
|
|
для: mtxd
(09.05.2006 в 19:06)
| | Давайте разбираться... для начала поместить перед циклом foreach проверку, на пустоту массива
<?php
if(!empty($dir_list))
foreach ($dir_list as $path) {
?>
|
Это должно исключить возникающие ошибки, когда циклу передаётся пустой массив. | |
|
|
|
|
|
|
|
для: cheops
(10.05.2006 в 13:38)
| | Вся сложность, как всегда, в простоте :)
Данный вариант, конечно, убирает ошибку цикла, однако все что связано с chdir - остается.
Warning: ftp_chdir(): PORT command successful in /home/www/filmdb/ftp/index2.php on line 17
Warning: ftp_chdir(): POSLE not understood in /home/www/filmdb/ftp/index2.php on line 17
Warning: ftp_chdir(): OSLE not understood in /home/www/filmdb/ftp/index2.php on line 17
Warning: ftp_chdir(): PORT command successful in /home/www/filmdb/ftp/index2.php on line 17
Warning: ftp_chdir(): PORT command successful in /home/www/filmdb/ftp/index2.php on line 17
Warning: ftp_chdir(): E not understood in /home/www/filmdb/ftp/index2.php on line 17
Warning: ftp_chdir(): Invalid command: try being more creative in /home/www/filmdb/ftp/index2.php on line 17
Warning: ftp_chdir(): POLUNUCHI/ not understood in /home/www/filmdb/ftp/index2.php on line 17
Warning: ftp_chdir(): OLUNUCHI/ not understood in /home/www/filmdb/ftp/index2.php on line 17
Очень странно, так как в моем случае директория /pub/VIDEO/ сканируется безо всяких проблем, рекусивно. Как только выходим выше, на /pub/, начинаются проблемы. Имена папок нормальные. | |
|
|
|
|
|
|
|
для: mtxd
(10.05.2006 в 14:12)
| | Вот что не понятно, откуда берётся переменная $directory в функции?
<?php
ftp_chdir($link, $root.$directory);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(10.05.2006 в 14:19)
| | При первом входе в цикл переменная $directory не равна ничему, поэтому проверяем корень ($root). Потом в нее заносятся данные из
<?
$output = explode(":", $path);
$left = $output[0];
$directory = substr($output[1], 3);
?>
|
| |
|
|
|
|
|
|
|
для: mtxd
(10.05.2006 в 14:29)
| | Вопрос остается актуальным... или только для меня? Жду поддержки :) | |
|
|
|
|
|
|
|
для: mtxd
(11.05.2006 в 14:12)
| | Любопытная фраза "Warning: ftp_chdir(): POSLE not understood" - вы не знаете с каким типом FTP-сервера вы соединяетесь, почему он не понимает этой команды FTP-протокола? | |
|
|
|
|
|
|
|
для: cheops
(11.05.2006 в 23:26)
| | /pub/VIDEO/ сканируется на базе proftpd 1.3.0. Результат - все в порядке (180 элементов массива).
/pub/ на том же сервере выдает эти ошибки, причем видно что POSLE, POLUNUCHI и CHI иногда заменяют сервисную PORT (кстати, других изменений нет).
При сканирование другого ресурса со структурой папок как /pub/VIDEO - результат пустая страница, сервер на vsftpd(версию сейчас не вспомню, если критично - посмотрю). Примерных элементов массива должно быть 500-600. Ругался на нехватку памяти, но поднял лимит.
А команду не понимает потому что такой просто нет в протоколе FTP. | |
|
|
|
|
|
|
|
для: mtxd
(11.05.2006 в 23:59)
| | Уважаемые, больше никаких предположений не будет? Очень нужна полностью рабочая версия, а собственные идеи уже закончились :( | |
|
|
|
|
|
|
|
для: mtxd
(15.05.2006 в 12:49)
| | Идея очень и очень простая. На официальном сайте php.net в разделе документация, при описании функций работы с FTP внизу всегда пользовательские примеры. Там полностью есть готовые универсальные коды для любого типа FTP. Идешь, читаешь, радуешься и не паришь товарищей и себя :-)) | |
|
|
|
|
|
|
|
для: XPraptor
(15.05.2006 в 13:00)
| | Было бы все так просто как ты пишешь, не стал бы задавать вопросов. Те примеры либо несколько другого направления (аплод, миграция), либо тоже такие же простые как и скрипт оригинала, который я переделывал. Я даже готов отказаться от PHP и сделать это все на другом языке (perl, например), но во-первых я его не знаю, во-вторых пока не нашел готового решения :(
А цель такова - загнать информацию о файлах в базу для дальнейшей обработки. | |
|
|
|