我有以下代码:
$file = 'http://3.bp.blogspot.com/-AGI4aY2SFaE/Tg8yoG3ijTI/AAAAAAAAA5k/nJB-mDhc8Ds/s400/rizal001.jpg';
$newfile = '/img/submitted/yoyo.jpg';
if ( copy($file, $newfile) ) {
echo "Copy success!";
}else{
echo "Copy failed.";
}
并始终输出“复制失败”
copy(/img/submitted/yoyo.jpg) [function.copy]: failed to open stream: No such file or directory
我的目录设置为777。
任何想法?谢谢!
答案 0 :(得分:56)
虽然copy()
会接受一个网址作为源参数,但它可能会出现目标的网址。
您是否尝试过指定输出文件的完整文件系统路径?我假设您没有尝试将新文件放到远程服务器上。
例如:
$file = 'http://3.bp.blogspot.com/-AGI4aY2SFaE/Tg8yoG3ijTI/AAAAAAAAA5k/nJB-mDhc8Ds/s400/rizal001.jpg';
$newfile = $_SERVER['DOCUMENT_ROOT'] . '/img/submitted/yoyo.jpg';
if ( copy($file, $newfile) ) {
echo "Copy success!";
}else{
echo "Copy failed.";
}
以上对我来说很有效。
答案 1 :(得分:6)
我在我的一个旧项目中找到了这个功能。
private function download_file ($url, $path) {
$newfilename = $path;
$file = fopen ($url, "rb");
if ($file) {
$newfile = fopen ($newfilename, "wb");
if ($newfile)
while(!feof($file)) {
fwrite($newfile, fread($file, 1024 * 8 ), 1024 * 8 );
}
}
if ($file) {
fclose($file);
}
if ($newfile) {
fclose($newfile);
}
}
答案 2 :(得分:3)
如果文件无法公开访问,则无法从服务器复制文件而无法访问该文件。
您可以使用ftp_get()打开FTP连接并复制文件。
$local_file = 'localname.zip'; // the nam
$server_file = 'servername.zip';
$conn = ftp_connect($ftp_server);
$login_result = ftp_login($conn, $ftp_user_name, $ftp_user_pass);
if (ftp_get($conn, $local_file, $server_file, FTP_BINARY)) {
echo "Successfully copied";
}
ftp_close($conn);
但是,如果您想从URL下载文件
$fullPath = "filepath.pdf";
if ($fd = fopen ($fullPath, "r")) {
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
header("Content-type: application/octet-stream");
header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
header("Content-length: $fsize");
header("Cache-control: private"); //use this to open files directly
while(!feof($fd)) {
$buffer = fread($fd, 2048);
echo $buffer;
}
}
fclose ($fd);