我试图从URL获取文件,然后通过FTP将该文件上传到另一台使用PHP的服务器。我收到错误警告: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();
$ upload的var_dump()为NULL。 URL是正确的(显然不在此示例中),因为我可以var_dump $ local_file并查看内容。
如何将file_get_contents()中返回的字符串转换为可与ftp_put()函数一起使用的资源?
答案 0 :(得分:1)
答案 1 :(得分: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();
答案 2 :(得分:-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);