【问题标题】:How to upload file from url via ftp using php?如何使用php通过ftp从url上传文件?
【发布时间】:2012-01-08 12:30:54
【问题描述】:

如何使用php将图片从url上传到ftp?

想把图片从url上传到ftp

例如:http://test.com/imagefile.jpghttp://test.com/testvideo.flv

我希望通过 FTP 或 curl php 上传该文件,

我这里有示例代码,但它不起作用。

它说没有找到文件。

$ftp_server ="ftp.yoursite.com"
$ftp_user ="yoursite user"
$ftp_password = "yoursite pass"
$file_to_upload = "http://test.com/imagefile.png";
$remote_location = "/test";

// set up connection or exit with message
$flink = ftp_connect($ftp_server) or exit("Can't connect to ftp server: $ftp_server");

// login or at least try  
if(ftp_login($flink, $ftp_user, $ftp_password)) {


 // if login successful use ftp_put to upload the file
 // if you upload binary files use mode FTP_BINARY
 if(ftp_put($flink, $remote_location, $file_to_upload, FTP_ASCII)) {

  echo "Success! File is uploaded!";
 } else {
  echo "Can't upload file";

 }
} else {
 echo "Can't login with this user & password";

}

// close the connection
ftp_close($flink);

任何人都可以解决这个问题?或者任何人都可以提出比这更好的建议? 谢谢!非常感谢您的帮助。

【问题讨论】:

  • 如果您使用 ftp_put,$file_to_upload 必须是服务器上的本地文件。

标签: php file-upload curl upload ftp


【解决方案1】:

我解决了这种情况,首先从给定的 URL 读取文件内容,然后将其内容保存到临时文件中,然后使用 ftp 上传文件。

代码:

$config = array(
   'host'    => '',
   'port'     => '',
   'username' => '',
   'password' => ''
);

function init(array $config)
{
    $port = (!empty($config['port']))? intval($config['port']) : 21;
    $resource = ftp_connect($config['host'], $port);
    ftp_login($resource, $config['username'], $config['password']);
    ftp_pasv($resource, true);
    return $resource;
}

function uploadFile(string $url, $resource)
{
    $data = file_get_contents($url);
    $tmpFilename = tempnam('/tmp', rand(10, 100) . '_');
    file_put_contents($tmpFilename, $data);
    ftp_put($resource, '/new_file', $tmpFilename, FTP_BINARY);
    unlink($tmpFilename);
    ftp_close($resource);
}

$resource = init($config);
uploadFile(
    "https://cdn.sstatic.net/Sites/*/img/sprites.svg?v=1b3cdae197be",
     $resource
);

更多关于从 url 下载文件并从另一台服务器保存文件并创建临时文件的答案 -> first, second, third

【讨论】:

    【解决方案2】:

    基本上是这样的:

    $connection = ftp_connect($ftp_server); $login = ftp_login($connection, $ftp_user, $ftp_password); if (!$connection || !$login) { die('连接尝试失败!'); } $upload = ftp_put($connection, $remote_location, $file_to_upload, FTP_ASCII); if (!$upload) { echo 'FTP 上传失败!'; } ftp_close($connection); //或者你可以这样做: $upload = copy($source, ‘ftp://user:password@host/path/file‘);

    这两种方法都对我有用。 希望对你有帮助

    【讨论】:

    • 您好,它不起作用,我测试了代码 $connection = ftp_connect($ftp_server); $login = ftp_login($connection, $ftp_user, $ftp_password); if (!$connection || !$login) { die('连接尝试失败!'); } $upload = ftp_put($connection, '上传/', 'mysite.com/myfile.jpg', FTP_ASCII); if (!$upload) { echo 'FTP 上传失败!'; } ftp_close($connection);