У меня есть следующий код:
$file = 'http://img.ruphp.com/copy/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.
есть идеи? благодаря!
Хотя copy()
будет принимать URL-адрес в качестве исходного аргумента, он может иметь проблемы с URL-адресом для адресата .
Вы пытались указать полный путь файловой системы к выходному файлу? Я предполагаю, что вы не пытаетесь поместить новый файл на удаленный сервер.
Например:
$file = 'http://img.ruphp.com/copy/rizal001.jpg'; $newfile = $_SERVER['DOCUMENT_ROOT'] . '/img/submitted/yoyo.jpg'; if ( copy($file, $newfile) ) { echo "Copy success!"; }else{ echo "Copy failed."; }
Выше было хорошо для меня.
Я нашел эту функцию в одном из моих старых проектов.
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); } }
Если файл не является общедоступным, вы не можете копировать файл с сервера, не имея к нему доступа.
Вы можете использовать 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);