March 23, 2012
Copy file from remote server or URL
Question by Kris
I have the following code:
$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.";
}
and it always output “Copy failed”
copy(/img/submitted/yoyo.jpg) [function.copy]: failed to open stream: No such file or directory
my directory is set to 777.
any ideas? thanks!
Answer by Mark Biek
While copy()
will accept a URL as the source argument, it may be having issues a url for the destination.
Have you tried specifying the full filesystem path to the output file? I’m assuming you’re not trying to put the new file onto a remote server.
For example:
$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.";
}
The above worked nicely for me.
Answer by Starx
You cannot copy a file from a server without having access to it.
You can ftp_get() to open up a FTP connection and copy file.
$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);
If you want to download a file from 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);