|
|
|
| Всем доброго времени суток! у меня такой вопрос. есть у меня скрипт ftp.php, в нем следующая функция:
function copy_ftp($connect, $local_dir, $directory)
{
ftp_chdir($connect, "course/mods");
echo $local_dir." - ".$directory."<br/>";
//узнаю какие файлы находятся в каталоге
$site = ftp_nlist($connect, $directory);
//в цикле перебираю файлы
foreach ($site as $value)
{
//echo $value."<br>";
if (($value == '.') or ($value == '..')) continue;
if(ftp_size($connect, $value) == -1)
{
echo $local_dir."/".$value;
echo "<br/>";
mkdir($local_dir."/".$value);
ftp_chdir($connect,$value);
copy_ftp($connect, $local_dir.'/'.$value, $directory);
ftp_chdir($connect,"..");
}
else
{
$copy=ftp_get($connect, $local_dir."/".$value, $value, FTP_BINARY);
}
}
}
|
и есть другой скрипт, index.php.
require_once('ftp.php');
$local_dir="D:/mydisk/10";
$directory="";
copy_ftp($connect, $local_dir, $directory);
|
мне из него нужно вызвать эту функцию, но не могу... вылезают ошибки такого типа:
Warning: ftp_chdir(): 3 is not a valid FTP Buffer resource
ftp_nlist(): 3 is not a valid FTP Buffer resource
Я не могу понять, в чем проблема, и что я не так делаю при вызове функции??? подскажите плиз? | |
|
|
|
|
|
|
|
для: tonechka
(09.10.2010 в 22:22)
| | включите диагностику ошибок и убедитесь, что переменная $connect не определена. | |
|
|
|
|
|
|
|
для: Trianon
(09.10.2010 в 22:53)
| | она определена в файле ftp.php!!!! просто я не стала сюда писать!!! | |
|
|
|
|
|
|
|
для: tonechka
(09.10.2010 в 23:05)
| | смотрите значения переменных
, например вот это работает
<?php
function copy_ftp($connect, $local_dir, $dir) {
echo '<h3>'. $local_dir .' - '. $dir ."</h3>\n";
$list = ftp_nlist($connect, $dir);
foreach ($list as $v) //в цикле какие файлы
{
if (($v == '.') or ($v == '..')) continue;
// var_dump(ftp_size($connect, $dir .'/'. $v));
// echo $local_dir .'/'. $v .' '. $dir .'/'. $v;
// exit();
if (ftp_size($connect, $dir .'/'. $v) == -1) {
echo $dir .'/'. $v ."<br/>\n";
if (! mkdir($local_dir .'/'. $v)) echo 'mkdir('. $local_dir .'/'. $v
.') FAILED' ."<br/>\n";
else copy_ftp($connect, $local_dir .'/'. $v, $dir .'/'. $v);
}
else echo (ftp_get($connect, $local_dir .'/'. $v, $dir .'/'. $v, FTP_BINARY))
? $dir .'/'. $v .' скопирован' ."<br/>\n"
: $dir .'/'. $v .' не скопирован!' ."<br/>\n";
echo "<hr/>\n\n";
flush();
}
}
#_________________________________________________________________
if (!($link = ftp_connect('ftp.funet.fi'))) exit('Сервер не отвечает');
if (!ftp_login($link, 'anonymous', 'john@doe.com')) exit('нет регистрации');
//ftp_pasv($link, true);
if (!is_dir('./image/test')) exit('некуда копировать');
copy_ftp($link, './image/test', '/pub/astro/dbases/observations/deepsky/other_cl');
|
но если сервер поменять на 'ftp.ru' каталог какой-нибудь тоже в /pub/ , и раскомментировать в функции три строчки, то увидите что функция ftp_nlist() там возвращает имена с полными путями. соответственно ничего работать не будет.
//ps c моей скоростью даже этот скрипт вылетел по max_execution_time | |
|
|
|
|
|
|
|
для: tonechka
(09.10.2010 в 23:05)
| | Вы диагностику включили или нет?
error_reporting(E_ALL);
тройка, кстати, и вправду врядли адекватное определение. | |
|
|
|
|
|
|
|
для: Trianon
(10.10.2010 в 01:25)
| | Конечно включила!!! поэтому он и выдает такие ошибки, а без этого просто не работал и молчал!!!! ))) | |
|
|
|
|
|
|
|
для: tonechka
(10.10.2010 в 10:32)
| | вот в этом Вашем фрагменте я добавил одну строку echo.
require_once('ftp.php');
$local_dir="D:/mydisk/10";
$directory="";
echo $connect;
copy_ftp($connect, $local_dir, $directory);
|
в переменной $connect почему-то лежит число.
а должен лежать дескриптор открытого FTP-соединения.
Результат вызова функции ftp_connect()
Из фрагмента видно, что саму переменную Вы не определили.
Тем не менее диагностика показывает, что значение ей присвоено - числовое.
Почему так, может знать лишь автор кода. | |
|
|
|
|
|
|
|
для: Trianon
(10.10.2010 в 10:51)
| | >вот в этом Вашем фрагменте я добавил одну строку echo.
у меня ничего не выводится((( а автор кода, ни кто иной, как я... кодик я сама написала. но я не могу понять почему если вызываю из файла где написана функция, все работает, а если из другого скрипта, то нет | |
|
|
|
|
автор: ..... (10.10.2010 в 15:24) |
|
|
для: tonechka
(10.10.2010 в 14:31)
| | в вашем коде много непонятного
> ftp_chdir($connect, "course/mods");
для чего переходить при каждой итерации функции в какую-то загадочную дирректорию с относительным путём ???
> copy_ftp($connect, $local_dir, $directory);
я так понимаю равноценно copy_ftp($connect, 'D:/mydisk/10', '');
дирректория 'D:/mydisk/10' существует?
выше вызова функции (неважно в каких файлах) проверяется успешность соединения и авторизации ?
похоже на
if (!($connect = ftp_connect('ftp-сервер'))) exit('Сервер не отвечает');
if (!ftp_login($connect, 'логин', 'пароль')) exit('нет регистрации'); | |
|
|
|
|
|
|
|
для: .....
(10.10.2010 в 15:24)
| | > ftp_chdir($connect, "course/mods");
>>для чего переходить при каждой итерации функции в какую-то загадочную дирректорию с относительным путём ???>в вашем коде много непонятного
это просто я пока тестирую так, а вообще там будет динамический путь!!!
> copy_ftp($connect, $local_dir, $directory);
>>так понимаю равноценно copy_ftp($connect, 'D:/mydisk/10', '');
не совсем, копируем туда, но откуда это как раз и будет динамическое....
успешность соединения и авторизации проверяется в файле где написана функция. | |
|
|
|
|
|
|
|
для: tonechka
(10.10.2010 в 14:31)
| | так. Если ничего не выводится, то меняем эту строчку (echo) на две других.
error_reporting(E_ALL|E_NOTICE);
var_dump($connect);
|
| |
|
|
|
|
|
|
|
для: Trianon
(10.10.2010 в 18:21)
| | так... поменяла.. теперь выводит
resource(3) of type (Unknown)
((( ему тип соединения чтоль не нравится? | |
|
|
|
|
|
|
|
для: tonechka
(10.10.2010 в 19:12)
| |
require_once('ftp.php');
$local_dir="D:/mydisk/10";
$directory="";
echo $connect;
copy_ftp($connect, $local_dir, $directory);
|
в этом фрагменте вообще не видно, откуда взялась переменная $connect, и что в ней содержится.
Может там то что нужно... а может и нет.
Но ругань-то идет именно на ту переменную... | |
|
|
|
|
|
|
|
для: Trianon
(10.10.2010 в 19:32)
| |
$host = "ftp.ru"; (например)
$connect = ftp_connect($host);
if(!$connect)
{
echo("Ошибка соединения");
exit;
}
else
{
echo("Соединение установлено");
}
//echo $connect;
$user = "user";
$password = "111";
$result = ftp_login($connect, $user, $password);
if ($result)
{
echo "<br>";
echo "пароль и логин верные";
echo "<br>";
}
else
echo "пароль и логин не верны";
|
Вот это у меня в файле где сама функция написана!!! | |
|
|
|
|
|
|
|
для: tonechka
(10.10.2010 в 19:47)
| | так со всеми серверами?
запустите тестовый скрипт , заменив ftp5.ru.freebsd.org на нужный вам сервер
<?php
header('content-type: text/plain');
echo $_SERVER['SERVER_SOFTWARE'] ."\n". PHP_VERSION ."\n\n";
if (!($link = ftp_connect('ftp5.ru.freebsd.org'))) exit('Сервер не отвечает');
var_dump($link);
var_dump(ftp_raw($link, "SYST"));
var_dump(ftp_raw($link, "FEAT"));
//if (!ftp_login($link, 'anonymous', 'john@doe.com')) exit('нет регистрации');
//var_dump($link);
?>
|
resource(2) of type (FTP Buffer) у меня. | |
|
|
|
|
|
|
|
для: heed
(10.10.2010 в 20:29)
| | вот когда я вызываю из того же скрипта где функция, он мне тоже пишет resource(2) of type (FTP Buffer), а когда пытаюсь из другого то, выдает 3 или 4(((( | |
|
|
|
|
|
|
|
для: tonechka
(10.10.2010 в 21:06)
| | может дело в том что require_once() ,одного и того-же файла, вызванное в участвующих скриптах дважды второй раз не выполняет его? | |
|
|
|
|
|
|
|
для: tonechka
(10.10.2010 в 21:06)
| | или похоже на то что где-то была вызвана ftp_close();
у меня в таком случае resource(2) of type (Unknown) | |
|
|
|
|
|
|
|
для: heed
(10.10.2010 в 22:04)
| | ну ftp_close() у меня вызывается в том же файле где функция, в самом конце..Это неправильно? | |
|
|
|
|
|
|
|
для: tonechka
(10.10.2010 в 22:16)
| | да :) это закрывает соединение с ftp-сервером | |
|
|
|
|
|
|
|
для: heed
(10.10.2010 в 22:25)
| | блин, тогда я вообще ничего не понимаю(((( как же тогда вызвать то эту функцию то((((( | |
|
|
|
|
|
|
|
для: tonechka
(10.10.2010 в 22:28)
| | ... | |
|
|
|
|
|
|
|
для: tonechka
(10.10.2010 в 22:28)
| | можно совсем не вызывать, пхп после завершения выполнения кода сам прибивает все открытые соединения, закрывает дескрипторы. Но если хотите сделать это раньше, то после того как выполнились все ftp_* функции и пользовательские функции в которых есть вызовы этих ftp_*
, и если закрываемый дескриптор является дескриптором успешно открытого соединения. | |
|
|
|
|
|
|
|
для: heed
(10.10.2010 в 22:59)
| | Убрала,я вызов ftp_close, но все равно не работает... что ж такое то(((((( | |
|
|
|
|
|
|
|
для: tonechka
(10.10.2010 в 19:47)
| | В каком файле не так существенно, как в каком процессе.
Переменные принадлежат не файлам, а исполняемым процессам. | |
|
|
|
|
|
|
|
для: tonechka
(09.10.2010 в 22:22)
| | > вылезают ошибки такого типа:
>Warning: ftp_chdir(): 3 is not a valid FTP Buffer resource
>ftp_nlist(): 3 is not a valid FTP Buffer resource
>
>Я не могу понять, в чем проблема, и что я не так делаю при вызове функции??? подскажите плиз?
Где-то была шикарная фраза, не помню где, но смысл примерно такой: «Начинающие программисты относятся к сообщениям об ошибках, как двоечники к вредному завучу: орёт не за дело, а просто так, потому что оболтус»
Вот и здесь. Вам чёрным по белому написали: то, что вы передаёте в функцию ftp_chdir(), ей не нравится. А именно, ей не нравится, что вы передаёте ей число «3». Так посмотрите, что вы передаёте этой функции, откуда взялась эта тройка, и так далее. | |
|
|
|