Enregistrer une image depuis un URL

Petit nouveau ! | 5 Messages

16 nov. 2021, 12:08

Bonjour,
Je cherche à enregistrer l'image d'une URL dans le repertoire Downloads de mon PC sous windows.
Pourquoi ce script ne fonctionne pas?

Code : Tout sélectionner

$path_source = 'https://forum.phpfrance.com/styles/PHPfrance/theme/phpfrance-logo.png'; $path_dest = 'C:/Users/Francois/image_test.jpg'; // Enregistrer l'image file_put_contents($path_dest, file_get_contents($path_source));
A noter que je récupère et affiche facilement l'image dans le browser avec le code suivant

Code : Tout sélectionner

$TheImage = file_get_contents(https://forum.phpfrance.com/styles/PHPfrance/theme/phpfrance-logo.png'); echo $TheImage; //Affiche l'image récupérée
Merci de votre aide

ynx
Mammouth du PHP | 586 Messages

16 nov. 2021, 21:17

Bonjour,

Sur mon poste le script fonctionne correctement.
Un problème de droit sur le dossier ? Pas d'erreur PHP ?
<?php

$path_source = 'https://forum.phpfrance.com/styles/PHPfrance/theme/phpfrance-logo.png';
$path_dest = 'C:/Users/Francois/image_test.jpg';

if (is_writable(dirname($path_dest))) {
    echo 'Le dossier est accessible en écriture';
} else {
    echo 'Le dossier n\'est pas accessible en écriture';
}

file_put_contents($path_dest, file_get_contents($path_source));

if (false === file_put_contents($path_dest, file_get_contents($path_source))) {
    print_r(error_get_last());
} else {
    echo 'Image enregistrée';
}


Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

17 nov. 2021, 13:34

Vérifie dans les logs de ton serveur (phpinfo() pour savoir où sont les logs) pour voir si il n'y a pas des messages d'erreurs que tu manquerais.

Par ailleurs tu es sûr que "Francois" n'a pas de cédille sur ton ordi ?
Si tu fais Démarrer > exécuter > "C:\Users\Francois\" ça affiche bien le bon répertoire ?

Si tu as un antivirus essaye de le désactiver pour voir si ce n'est pas lui qui bloquerait.

Et sinon essaye dans d'autres répertoires.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 5 Messages

17 nov. 2021, 15:27

Bonjour,
Oui Francois sans cedille est le bon repertoire. Ca ne fonctionne pas non plus dans d'autres repertoires.
Avec le script de ynx j'obtiens le message d'erreur ci dessous :
Le dossier n'est pas accessible en écritureArray ( [type] => 2 [message] => file_put_contents(C:/Users/image_test.jpg): failed to open stream: No such file or directory [file] => /home/paujazz/www/QR/qr_essai.php [line] => 14 )
Il semble bien qu'il y ait un problème d'écriture dans le dossier, mais j'ai sur mon PC décoché "Lecture seule" du repertoire Users et ça me met tjs le meme message d'erreur. Je ne comprends pas ce qui se passe.
Vous pouvez essayer mon fichier Https:// paujazz.fr/QR/qr_essai.php et me dire ce qui se passe chez vous?

ynx
Mammouth du PHP | 586 Messages

17 nov. 2021, 15:46

Ah du coup le serveur PHP n'est pas sur le même ordinateur où est situé le dossier C:/Users/Francois/ ?
PHP ne peut accéder au système de fichier uniquement sur l'ordinateur ou le serveur sur lequel il est exécuté.

Si ton script php est herbergé sur un serveur distant, PHP ne pourra pas accéder au répertoire C:/Users/Francois/ de ton ordinateur (ce serait une grosse faille de sécurité sinon puisque n'importe quel site internet pourrait enregistrer n'importe quel fichier sur le poste de l'internaute).
Si tu veux proposer à l'internaute de télécharger l'image sur son poste, le plus simple est de faire un lien html avec l'attribut download. C'est par contre l'internaute qui devra définir dans quel dossier il souhaite enregistrer l'image sur son poste, tu ne pourras le définir pour lui.