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

时间:2017-07-19 21:50:22

标签: php ftp

我有这个链接: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";
}

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

3 个答案:

答案 0 :(得分: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";
}

答案 1 :(得分: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

答案 2 :(得分:-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