2016-10-05 1 views
1

Ich versuche eine Datei von einer URL zu bekommen und dann diese Datei per FTP auf einen anderen Server mit PHP hochzuladen. Ich bin den Fehler Warnung empfangen: ftp_put() erwartet Parameter 3 ein gültiger Pfad zu sein, da StringWarnung: ftp_put() erwartet, dass Parameter 3 ein gültiger Pfad ist, gegebener String

// file to move: 
$local_file = file_get_contents("http://cdn.server.com/affiliate/1.jpg"); 
$ftp_path = "/virtualhosts/path/for/upload/1.jpg"; 

// connect to FTP server (port 21) 
$conn_id = ftp_connect($host, 21) or die ("Cannot connect to host"); 

// send access parameters 
$ftp_login = ftp_login($conn_id, $usr, $pwd) or die("Cannot login"); 

// turn on passive mode transfers (some servers need this) 
//ftp_pasv($conn_id, true); 

// perform file upload 
$upload = ftp_put($conn_id, $ftp_path, $local_file, FTP_BINARY); 

var_dump($upload); 
exit(); 

Die var_dump() von $ upload NULL ist. Die URL ist korrekt (offensichtlich nicht in diesem Beispiel), da ich die $ local_file var_dump und den Inhalt sehen kann.

Wie konvertiere ich die in file_get_contents() zurückgegebene Zeichenfolge in eine Ressource, die mit der Funktion ftp_put() verwendet werden kann?

Antwort

1

Wie @nospor und die php manual sagen, müssen Sie bieten ein gültiger Pfad nicht der Inhalt der Datei. Es scheint, dass http://cdn.server.com/affiliate/1.jpg nicht auf dem Server befindet, auf dem basiert, können Sie copy() verwenden, um die Remote-Datei zum Download und laden Sie sie dann auf dem Remote-Server, so etwas wie:

<?php 

$remoteFile = "http://cdn.server.com/affiliate/1.jpg"; 
// get the filename of the remote file(1.jpg) 
$localFile = basename($remoteFile).PHP_EOL; 
// copy the remote file to /tmp/1.jpg 
copy($remoteFile, "/tmp/".$localFile); 
$ftp_path = "/virtualhosts/path/for/upload/$localFile"; 
// connect to FTP server (port 21) 
$conn_id = ftp_connect($host, 21) or die ("Cannot connect to host"); 
// send access parameters 
$ftp_login = ftp_login($conn_id, $usr, $pwd) or die("Cannot login"); 
// perform file upload 
$upload = ftp_put($conn_id, $ftp_path, "/tmp/".$localFile, FTP_BINARY); 
// delete the temporary file 
unlink("/tmp/".$localFile); 
exit(); 
-1

eine Lösung gefunden, teilweise Danke an den Kommentar von @nospor, dass der 3. Parameter ein lokaler Pfad sein muss und nicht die Datei selbst. Ja, das Handbuch sagt das, ist aber eindeutig der Teil, den ich übersehen habe.

Hier ist das Bit, das das Ergebnis der file_get_contents() und speichert sie in einem lokalen Verzeichnis, das dann mit ftp_put() verwendet werden kann, nimmt:

// save the file locally so it can be used for FTP 
$local_file_path = '/var/www/temp_images/' . $new_image; 
file_put_contents($local_file_path, $remote_file_contents); 
Verwandte Themen