Проблеми с ftp_put

streleca_stz

Registered
Здравейте! Днес за първи път се сблъсквам с ftp_put и не мога да се справя..

По замисъл искам да направя това:
Взимам линк на снимка от интернет -> правя й thumbnail -> качвам thumbnail-a на друг хостинг (от един хостинг смалявам картинката, а на друг качвам картинката)

Ето какво аз измъдрих до сега:
PHP:
    $conn_id = ftp_connect('server ip') or die ("Error 1");
    $login_result = ftp_login($conn_id, 'username', 'password') or die ("Error 2");

	$name = basename($filename);
	$to_where = 'thumbnails/'.$name;
	ftp_put($conn_id, $to_where, $filename, FTP_BINARY);
Дава ми следната грешка
Warning: ftp_put() [function.ftp-put]: Can't open that file: Not a directory in /home/tokiohot/public_html/functions.php on line 1269
на този ред е ftp_put.. :idea:
 
С функцията ftp_login, най-общо казано, влизаш в home директорията на съответния потреител. А най-вероятно thumbnails се намира в public_html, или с други думи:

PHP:
$to_where = 'public_html/thumbnails/'.$name;

също така може да използваш ftp_pwd за да видиш къде реално се намираш, след като се логнеш:

PHP:
ftp_login(.....);
echo ftp_pwd($conn_id);
 
exec каза:
С функцията ftp_login, най-общо казано, влизаш в home директорията на съответния потреител. А най-вероятно thumbnails се намира в public_html, или с други думи:

PHP:
$to_where = 'public_html/thumbnails/'.$name;

също така може да използваш ftp_pwd за да видиш къде реално се намираш, след като се логнеш:

PHP:
ftp_login(.....);
echo ftp_pwd($conn_id);

Окей, така стана, но имам друг проблем само, че с thumbnail-a.. използвам следния скрипт:
PHP:
	$final_width_to_image = 270;
	$final_height_to_image = 270;
	
	if(preg_match("/[.](jpg)$/", $filename))
	{
		$img = imagecreatefromjpeg($filename);
	}
	else if(preg_match("/[.](gif)$/", $filename))
	{
		$img = imagecreatefromgif($filename);
	}
	else if(preg_match("/[.](png)$/", $filename))
	{
		$img = imagecreatefrompng($filename);
	}
	$ox = imagesx($img);
	$oy = imagesy($img);
	$nx = $final_width_to_image;
	$ny = $final_height_to_image;
	$nImg = imagecreatetruecolor($nx, $ny);
	imagecopyresized($nImg, $img, 0, 0, 0, 0, $nx, $ny, $ox, $oy);
Обаче като задам на ftp_put вместо $filename (оригиналната снимка) $nImg (смалената) ми изкарва това:
Warning: ftp_put() [function.ftp-put]: Filename cannot be empty in /home/tokiohot/public_html/bg/gallery/index.php on line 62
 
$nImg = imagecreatetruecolor($nx, $ny);

$nImg не е това, което ти очакваш да е. На теб ти трябва име на файл, а пък $nImg е вид ресурс. С този код, ти можеш да покажеш снимката, но тя все още не съществува като файл. Можеш да използваш този ресурс от $nImg и да съдадеш файл, едва сле това можеш да използваш ftp_put за да прехвърлиш фала на другия сървър. След това сигурно трябва за изтриеш файла, който си създал напървия сървър.

В зависмост от вида на файла, използваш функция като imagejpeg за да създадеш и запишеш файла на първия сървър.

PHP:
$final_width_to_image = 270;
$final_height_to_image = 270;
	
if(preg_match("/[.](jpg)$/", $filename))
{
    $img = imagecreatefromjpeg($filename);
    $save_function = "imagejpeg";
}
else if(preg_match("/[.](gif)$/", $filename))
{
    $img = imagecreatefromgif($filename);
    $save_function = "imagegif";
}
else if(preg_match("/[.](png)$/", $filename))
{
    $img = imagecreatefrompng($filename);
    $save_function = "imagepng";
}
$ox = imagesx($img);
$oy = imagesy($img);
$nx = $final_width_to_image;
$ny = $final_height_to_image;
$nImg = imagecreatetruecolor($nx, $ny);
imagecopyresized($nImg, $img, 0, 0, 0, 0, $nx, $ny, $ox, $oy); 

//създаваш файл 
$save_function($nImg, $filename);

//качваш файла на другия сърър
ftp......

//изтриваш файла от първия сървъ
unlink($filename);
 

Back
Горе