2016-10-05 3 views
1

URLからファイルを取得し、FTP経由でPHPを使用して別のサーバにアップロードしようとしています。 ftp_put()は、文字列は$アップロードののvar_dump()がNULLである警告:ftp_put()は、パラメータ3に有効なパスが指定されていることを期待しています。

// 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(); 

を与え、パラメータ3は、有効なパスであることを期待:私はエラー警告を受けています。 $ local_fileをvar_dumpしてその内容を見ることができるので、URLは正しい(この例では明らかではない)。

file_get_contents()で返された文字列を、ftp_put()関数で使用できるリソースに変換するにはどうすればよいですか?

答えて

1

@nosporとphp manual言うように、あなたが提供する必要があります有効なパスファイルの内容ではありません。 にそれはhttp://cdn.server.com/affiliate/1.jpgはそれに基づいて、あなたのサーバ上に配置されていないようです、あなたは、リモートファイルをダウンロードしcopy()を使用して、リモートサーバーにアップロードすることができ、のようなもの:

<?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

は、部分的に、解決策を見つけました@nosporのコメントのおかげで、ファイル自体ではなくローカルパスである必要がある3番目のパラメータについて説明しました。はい、マニュアルはこれを言いますが、明らかに私が見落としていた部分です。ここで

だのfile_get_contents()の結果を受け取り、その後、ftp_put()で使用することができますローカルディレクトリに保存しますビット:

// 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); 
関連する問題