J'ai le code suivant:
$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.";
}
et il affiche toujours "Échec de la copie"
copy(/img/submitted/yoyo.jpg) [function.copy]: failed to open stream: No such file or directory
mon répertoire est défini sur 777.
des idées? Merci!
Alors que copy()
acceptera une URL comme argument source, il se peut que l'URL soit émise pour la destination .
Avez-vous essayé de spécifier le chemin d'accès complet du système de fichiers au fichier de sortie? Je suppose que vous n'essayez pas de mettre le nouveau fichier sur un serveur distant.
Par exemple:
$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.";
}
Ce qui précède a bien fonctionné pour moi.
J'ai trouvé cette fonction dans l'un de mes anciens projets.
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);
}
}
Si le fichier n'est pas accessible au public, vous ne pouvez pas copier un fichier à partir d'un serveur sans y avoir accès.
Vous pouvez utiliser ftp_get () pour ouvrir une connexion FTP et copier le fichier.
$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);
Mais, si vous souhaitez télécharger un fichier à partir de l'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);