我有这个链接: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";
}
连接成功,但在那之后我不知道如何开始。
你将不得不使用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";
}
如果你有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。
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";
}