Vous avez un formulaire comme celui-ci:
<form>
URL: <input name="url">
<input type="submit">
</form>
Ensuite, vous pouvez récupérer l'URL soumise avec $_GET['url']
:
$image = file_get_contents($_GET['url']);
file_put_contents('/images/image.jpg', $image);
Quoi qu'il en soit, vous devez être prudent sur l'inclusion de fichiers locaux, parce que sans vérifie les utilisateurs peuvent choisir le chemin comme /etc/passwd
, ../configuration.php
, etc, et si /images/image.jpg
peut être consulté par les utilisateurs, ils peuvent lire le fichier qui ne devrait pas voir.
Une chose que vous pouvez faire est de vérifier si le $_GET['url
] `est une adresse valide. Vous pouvez le faire avec:
if (!filter_var($_GET['url'], FILTER_VALIDATE_URL)) {
throw new \InvalidArgumentException('The url is not valid.');
}
mais cela ne suffit pas car file:///etc/passwd
est une URL valide. Donc, plutôt, assurez-vous que l'URL commence par http://
ou https://
.
$isValid = false;
foreach(['http://', 'https://'] as $schema) {
if (strpos($_GET['url'], $schema) === 0) {
$isValid = true;
break;
}
}
if ($isValid && filter_var($_GET['url'], FILTER_VALIDATE_URL)) {
$image = file_get_contents($_GET['url']);
file_put_contents('/images/image.jpg', $image); //Where to save the image on your server
}
@ abrad1212, '$ image = file_get_contents ($ _ GET ['url']);', mais seulement après avoir nettoyé '$ _GET ['url']' éviter les problèmes avec les personnes qui soumettent '? url = index.php' ou similaire – Federkun
Si l'image est plus grande, cela va causer des problèmes de mémoire. –
Jetez un oeil à ceci: http://stackoverflow.com/questions/724391/saving-image-from-php-url – Andreas