PHP将文件从HTTP URL复制到FTP服务器

问题描述 投票:1回答:3

我有这个链接:http://gdlp01.c-wss.com/gds/6/0300002536/03/PSG11_CUG_EN_03.pdf,我想将此文件复制到我的FTP服务器。我试过了:

$file = "http://gdlp01.c-wss.com/gds/6/0300002536/03/PSG11_CUG_EN_03.pdf";
$data = file_get_contents($url);

$ftp_server = "ftp_server";
$ftp_user = "ftp_user";
$ftp_pass = "ftp_pass";

$ftp = ftp_connect($ftp_server,21) or die("Couldn't connect to $ftp_server"); 

if (ftp_login($ftp, $ftp_user, $ftp_pass)) {
  echo "Connecté en tant que $ftp_user@$ftp_server\n";
} else {
  echo "Connexion impossible en tant que $ftp_user\n";
}

连接成功,但在那之后我不知道如何开始。

php ftp
3个回答
1
投票

你将不得不使用ftp_fput,但我不确定这个函数是否能够处理一个URL(我不这么认为),所以我决定将你现有的变量放入内存并伪造一个文件处理程序:

$tmpFile = fopen('php://memory', 'r+');
fputs($tmpFile, $data);
rewind($tmpFile);
if (ftp_fput($ftp, 'manual.pdf', $tmpFile, FTP_ASCII)) {
 echo "worked";
} else {
 echo "did not work";
}

0
投票

如果你有URL wrappers enabled,它就像:

$file = "http://gdlp01.c-wss.com/gds/6/0300002536/03/PSG11_CUG_EN_03.pdf";
$ftp_server = "ftp_server";
$ftp_user = "ftp_user";
$ftp_pass = "ftp_pass";

copy($file, "ftp://$ftp_user:$ftp_pass@$ftp_server/PSG11_CUG_EN_03.pdf");

如果您需要更好地控制写入(传输模式,被动模式,偏移,读取限制等),请使用带有ftp_fput手柄的php://temp (or the php://memory) stream

Transfer in-memory data to FTP server without using intermediate file


-1
投票

PHP有一个copy()方法:http://php.net/manual/en/function.copy.php,但对于ftp,你需要ftp_fput

您可能对此ftp_fput函数的问题是您需要定义文件服务器的ROOT路径以及实际更改该FTP服务器上文件夹中某些内容的权限(chmod-rights)。该文件夹取决于服务器。你已经找到了ftp方法,它有很多选项:http://php.net/manual/en/ref.ftp.php我没有测试过这个,但我希望它可以帮助你开始。

$ftproot = "/public_html/home/";
$toftpfile = $ftproot."example.pdf";

if (!ftp_fput($ftp, $file, $toftpfile)) {
    echo "failed to copy $file...\n";
}

http://php.net/manual/en/function.ftp-fput.php

© www.soinside.com 2019 - 2024. All rights reserved.