2016-03-28 2 views
0

D'accord, j'ai une question simple que je ne peux pas comprendre Comment puis-je fairePHP - Copier l'image depuis une autre URL

$image = file_get_contents('http://www.url.com/image.jpg'); 
file_put_contents('/images/image.jpg', $image); //Where to save the image on your server 

où je peux définir la variable $image en utilisant un formulaire HTML où les gens peuvent soumettre un lien en utilisant la méthode $_GET[""] au lieu d'avoir à changer le lien dans le fichier php manuellement?

+0

@ 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

+0

Si l'image est plus grande, cela va causer des problèmes de mémoire. –

+0

Jetez un oeil à ceci: http://stackoverflow.com/questions/724391/saving-image-from-php-url – Andreas

Répondre

0

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 
} 
0

@Federico

First

Second

Désolé, je n'ai pas beaucoup de temps pour mettre en forme le code que je suis sur mon téléphone téléchargement tout à mon serveur FTP Je voyage Donc désolé si tout est à l'étroit

EDIT: Je vois le! sur la deuxième image et l'enlever donc ne vous inquiétez pas

+0

ne pas soumettre une réponse, il suffit d'écrire un commentaire. avez-vous une question/un problème? – Federkun

+0

Désolé Im nouveau à cela, l'assainissement a fonctionné, mais l'image ne sauve pas du tout, toute aide est nécessaire – abrad1212

+1

'/ images/image.jpg' est le chemin absolu. vous pouvez le remplacer par '__DIR__. '/ images/image.jpg'' – Federkun