[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите подправить загрузку по ftp
Гость_Макс
есть такой скрипт, который заливает файлы по ftp на сервер из папки, но заливает непосредственно в корень, а мне нужно, чтобы он заливал скажем не в корень, а в папку, которая есть на сервере, конкретно привязаться к папке нельзя, так как названия могут меняться, то есть получается что файлы грузяться рядом с папкой, не хватает перехода в директорию как я понимаю.

Большое спасибо, надеюсь на помощь знатоков.

<?php

set_time_limit(0);
error_reporting(0);

$f_ftp = 'ftp.txt';
$dir = 'files';

$ftp = file($f_ftp);
$files = scandir($dir);

function put_file ($data_ftp, $dir, $file)
{

echo $data_ftp.' : '.$file;

$data_ftp = 'ftp://'.$data_ftp;
$data = parse_url($data_ftp);
$connect = ftp_connect($data[host]);
if($connect)
{
$res = ftp_login($connect, $data[user], $data[pass]);
if($res)
{

ftp_pasv($connect, true);
$put = ftp_put($connect, $file, $dir.'/'.$file, FTP_ASCII);
if($put) {echo ': <span style="color:#009900; font-weight:bold">Load</span><br>';}
else echo ': <span style="color:#FF0000; font-weight:bold">No put</span><br>';
}
else echo ': <span style="color:#FF0000; font-weight:bold">No login</span><br>';

ftp_close($connect);

}
else echo ': <span style="color:#FF0000; font-weight:bold">No connect</span><br>';


}



foreach ($ftp as $data_ftp)
{
for ($i = 2; $i < count($files); $i++)
{
put_file(trim($data_ftp), $dir, $files[$i]);
}
echo '<br>';
}

?>




Спустя 6 минут, 8 секунд (20.03.2010 - 12:28) Семён написал(а):
Честно сказать, через ftp_connect ниразу не делал.
CURL гораздо удобнее:

<form action="curlupload.php" method="post" enctype="multipart/form-data">
<div>
<label
for="upload">Select file</label>
<input
name="upload" type="file" />
<input
type="submit" name="Submit" value="Upload" />
</div>
</form>


if (isset($_POST['Submit'])) {
if (!empty($_FILES['upload']['name'])) {
$ch = curl_init();
$localfile = $_FILES['upload']['tmp_name'];
$fp = fopen($localfile, 'r');
curl_setopt($ch, CURLOPT_URL, 'ftp://ftp_login:password@ftp.domain.com/'.$_FILES['upload']['name']);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
curl_exec ($ch);
$error_no = curl_errno($ch);
curl_close ($ch);
if ($error_no == 0) {
$error = 'File uploaded succesfully.';
} else {
$error = 'File upload error.';
}
}
else {
$error = 'Please select a file.';
}

}

Спустя 19 минут, 36 секунд (20.03.2010 - 12:48) Guest написал(а):
нет, это немного не то. мне нужно мой скрипт подправить, чтобы загружал непосредственно в папку, которая есть на сервере, название папки рандомное скажем так.


Спустя 1 час, 25 минут, 40 секунд (20.03.2010 - 14:14) Nikitian написал(а):
ftp_nlist() получает список файлов и директорий, ftp_chdir() переходит в выбранный каталог. если ftp_chdir() не получился, значит это файл или закрытый каталог

Спустя 3 часа, 18 минут, 50 секунд (20.03.2010 - 17:32) Guest написал(а):
Цитата (Nikitian @ 20.03.2010 - 11:14)
ftp_nlist() получает список файлов и директорий, ftp_chdir() переходит в выбранный каталог. если ftp_chdir() не получился, значит это файл или закрытый каталог

как сие связать теперь с моим скриптом huh.gif

Спустя 17 часов, 45 минут, 7 секунд (21.03.2010 - 11:18) Nikitian написал(а):
Как-то так:
<?php

set_time_limit(0);
error_reporting(0);

$f_ftp = 'ftp.txt';
$dir = 'files';

$ftp = file($f_ftp);
$files = scandir($dir);

function put_file ($data_ftp, $dir, $file)
{

echo $data_ftp.' : '.$file;

$data_ftp = 'ftp://'.$data_ftp;
$data = parse_url($data_ftp);
$connect = ftp_connect($data[host]);
if($connect)
{
$res = ftp_login($connect, $data[user], $data[pass]);
if($res)
{
$list = ftp_nlist($res, '.');
if(is_array($list) && sizeof($list)>0)
{
$flag=false;
while(!$flag)
{
$dir=$list[mt_rand(0,sizeof($list)-1)];
if($dir!='.' && $dir!='..' && ftp_chdir($res,$dir))
$flag=true;
unset($list[array_search($dir,$list)]);
if(sizeof($list)==0)
{
$flag=true;
$dir=false;
}
}

if($dir===false)return false;//Нет директорий там, куда законнектились
ftp_cdup($res);
}

ftp_pasv($connect, true);
$put = ftp_put($connect, $file, $dir.'/'.$file, FTP_ASCII);
if($put) {echo ': <span style="color:#009900; font-weight:bold">Load</span><br>';}
else echo ': <span style="color:#FF0000; font-weight:bold">No put</span><br>';
}
else echo ': <span style="color:#FF0000; font-weight:bold">No login</span><br>';

ftp_close($connect);

}
else echo ': <span style="color:#FF0000; font-weight:bold">No connect</span><br>';


}



foreach ($ftp as $data_ftp)
{
for ($i = 2; $i < count($files); $i++)
{
put_file(trim($data_ftp), $dir, $files[$i]);
}
echo '<br>';
}

Спустя 9 часов, 2 минуты, 47 секунд (21.03.2010 - 20:20) Guest написал(а):
Цитата (Nikitian @ 21.03.2010 - 08:18)
Как-то так:
<?php

set_time_limit(0);
error_reporting(0);

$f_ftp = 'ftp.txt';
$dir = 'files';

$ftp = file($f_ftp);
$files = scandir($dir);

function put_file ($data_ftp, $dir, $file)
{

echo $data_ftp.' : '.$file;

$data_ftp = 'ftp://'.$data_ftp;
$data = parse_url($data_ftp);
$connect = ftp_connect($data[host]);
if($connect)
{
$res = ftp_login($connect, $data[user], $data[pass]);
if($res)
{
$list = ftp_nlist($res, '.');
if(is_array($list) && sizeof($list)>0)
{
$flag=false;
while(!$flag)
{
$dir=$list[mt_rand(0,sizeof($list)-1)];
if($dir!='.' && $dir!='..' && ftp_chdir($res,$dir))
$flag=true;
unset($list[array_search($dir,$list)]);
if(sizeof($list)==0)
{
$flag=true;
$dir=false;
}
}

if($dir===false)return false;//Нет директорий там, куда законнектились
ftp_cdup($res);
}

ftp_pasv($connect, true);
$put = ftp_put($connect, $file, $dir.'/'.$file, FTP_ASCII);
if($put) {echo ': <span style="color:#009900; font-weight:bold">Load</span><br>';}
else echo ': <span style="color:#FF0000; font-weight:bold">No put</span><br>';
}
else echo ': <span style="color:#FF0000; font-weight:bold">No login</span><br>';

ftp_close($connect);

}
else echo ': <span style="color:#FF0000; font-weight:bold">No connect</span><br>';


}



foreach ($ftp as $data_ftp)
{
for ($i = 2; $i < count($files); $i++)
{
put_file(trim($data_ftp), $dir, $files[$i]);
}
echo '<br>';
}

заливает рядом с папкой, не переходит как бы во внутрь.

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


Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.