Копирование файлов на ftp

friend123

Guest
Копирование файлов на ftp

Возник вопрос по поводу файлов!
Раньше на локальном сервере я работал с файлами так:
$uploaddir = "path\to\dir\";
if(is_dir($uploaddir)){
opendir($uploaddir);
}else{
mkdir($uploaddir);
}
foreach($_FILES as $img) {
if ($img['error']==0) {
$files = $id."-".$img['name'];
if(file_exists($uploaddir.$files)){
echo "Xaxa";
}elseif (move_uploaded_file($img['tmp_name'], $uploaddir.$img['name'])) {
rename($uploaddir.$img['name'], $uploaddir.$files);
$location=addslashes("path\to\dir\\$files");
$query = "INSERT INTO $table4 VALUES('id_img','$id','$location')";
$result = MYSQL_QUERY($query);
}
}else{ echo "<script language='JavaScript'>java script:history.back();</script>"; }
}

Т.е. были 4 поля <input type=file>, файл меняет имя и копируется в нужный каталог.
Но с ftp как-то по другому что ль? move_uploaded_file вроде не работает
 

friend123

Guest
Originally posted by SiMM
При чём тут ftp?
Фраза не работает ни о чём, кстати, не говорит.
PHP FAQ: Ничего не работает! Что делать??? - тебе будет полезна функция [m]print_r[/m]($_FILES) + ман, и вообще, пути принято писать с прямыми, а не обратными слэшами (PHP FAQ: Пути в файловой системе и на сайте.).
Функцией print_r($_FILES) воспользовался, но там все в порядке. Извиняюсь, что путь коряво написал.
$uploaddir = "c:\WebServer\work\tmp\\";
foreach($_FILES as $img) {
if ($img['error']==0) {
$files = $id;
if(file_exists($path.$files)){
echo "<script language='JavaScript'>";
echo "alert('Имя файла уже существует!');</script>";
}elseif(move_uploaded_file($img['tmp_name'], $uploaddir.$img['name'])){
ftp_put($connection, $uploaddir.$img['name'], $path.$img['name'], FTP_BINARY);
$path.$files);
$location="$path/$files";
$query = "INSERT INTO $table11 VALUES('id_img','$id','$location')";
$result = MYSQL_QUERY($query);
} } }

Пробую закачать на локальный сервер, а далее на ftp
 

SiMM

Новичок
[m]ftp_put[/m], опять же читать FAQ, включить вывод ВСЕХ ошибок (error_reporting(E_ALL)) и отлаживать свой скрипт самостоятельно.
 

friend123

Guest
Я знаю, что ftp_put. Но что он должен класть. Мой код вообще логичен или нет? В том то и прикол, что ошибок нет. Я уже заотлаживался его.
 

SiMM

Новичок
friend123, извини, но судя по твоему коду (если это весь код, а не жалкий огрызок, по которому нельзя сказать, что и насколько ты знаешь) я судить о том, что ты читал мануал хотя бы раз, не могу. Либо приводи весь имеющий отношение к делу код, либо решай проблемы самостоятельно. Как - я уже сказал. И вообще, проблемы решать надо по шагам - у тебя есть проблемы с уплоадом? Нет? Тогда какого чёрта в твоём коде он присутствует? Напиши скрипт в пару строк, который просто копирует файл на фтп (да хоть самого себя) и добейся его работоспособности.
 

friend123

Guest
Почитал про ftp_put, написано все понятно, но все равно не работает. Файл-скрипт находится на ftp-сервере, может что-то связано с этим?
 

SiMM

Новичок
friend123, да посмотри ты на пример из мана внимательно и поступи по аналогии. То, что ты здесь приводил, работать не должно, хотя бы потому, что никакого коннекта к серверу ты не делал (где [m]ftp_connect[/m]? где [m]ftp_login[/m]?) + при отладке обязательно error_reporting E_ALL и display_errors On. Очень может оказаться, что придётся ещё прибегнуть к функции [m]ftp_pasv[/m].
 

friend123

Guest
$file = 'c:/Webserver/work/tmp/91.jpg';
$file2 = '/html/news/91.jpg';

$server='name.server.ru';
$connection = ftp_connect($server);
$user = "user";
$pass = "pass";
$result = ftp_login($connection, $user, $pass);

if (ftp_fput($connection, $file2, $file, FTP_ASCII)) {
echo "Загружен файл $file2\n";
} else {
echo "Проблема загрузки $file2\n";
}
ftp_close($connection);

Примитивный код, исполняющийся на локальном компе.
 

SiMM

Новичок
И? В чём проблема? Здесь даже не сказано, что код не работает, и какие ошибки он выдаёт. Если же он не работает - смотри на сообщения об ошибках и в логи ftp-сервера. И вообще, что-то мне подсказывает, что на твоём локальном компьютере FTP-сервер вообще не установлен - ты к нему коннектиться из других приложений пробовал?
 

friend123

Guest
У меня есть Total Commander, к ftp коннектюсь нормально. С помощью пхп-скрипта создаю каталоги на ftp, т.е. к ftp через скрипт он коннектится, но только когда файл-скрипт лежит на ftp.

Да, скрипт не выдает ошибок, только долго грузится и пишет, что время подключения истекло. Вот что делать?
 

SiMM

Новичок
friend123, ты хоть факи читал?
error_reporting(E_ALL) + ini_set('display_errors',1), либо смотри в логи. Ошибки быть должны, и скорее всего что нибудь типа gethostbyname failed - а с этими вопросами не к PHP.
 

friend123

Guest
Да выводит у меня скрипт ошибки, да только их нет
error_reporting(E_ALL);
ini_set('display_errors', 'On');

Ладно покопаюсь в логах

В логах ничего нет, все ОК. Как быть то здесь?
Есть у кого какие-нибудь мысли?
 
Сверху