web-dev-qa-db-fra.com

Télécharger une image depuis une URL en utilisant le code php?

Comment utiliser php pour télécharger une image à partir d'une URL (par exemple: https://www.google.com/images/srpr/logo3w.png ) puis enregistrez-la? jusqu'ici, cela me donne une erreur dans la fonction 'file_put_contents'.

<form method="post" action="">
<textarea name="text" cols="60" rows="10">
</textarea><br/>
<input type="submit" class="button" value="submit" />
</form>

<?php
    $img = "no image";
    if (isset($_POST['text']))
    {
    $content = file_get_contents($_POST['text']);
    $img_path = '/images/';
    file_put_contents($img_path, $content);    
    $img = "<img src=\"".$img_path."\"/>";
    }
    echo $img;
?>

Cela me donne l'erreur:

[function.file-put-contents]: failed to open stream: No such file or directory in C:\wamp\www\img.php

Le répertoire /images/ est situé dans le même répertoire que le fichier php et est accessible en écriture.

15
Sarah

Vous ne pouvez pas enregistrer l'image avec votre code existant car vous ne fournissez pas de nom de fichier. Vous devez faire quelque chose comme:

$filenameIn  = $_POST['text'];
$filenameOut = __DIR__ . '/images/' . basename($_POST['text']);

$contentOrFalseOnFailure   = file_get_contents($filenameIn);
$byteCountOrFalseOnFailure = file_put_contents($filenameOut, $contentOrFalseOnFailure);
31
Jon

Quelle est ton erreur? Mais vous avez la bonne façon de faire ce que vous voulez faire.

Faites attention dans votre code, je peux voir file_put_contents($img_path, mais $img_path est un chemin d'accès à un dossier . Vous devez écrire quelque chose comme:

Exemple

$img_path="home/downloads/my_images";
file_put_contents($img_path."/flower.jpg");
1
NeeL

J'ai ajouté une condition à la réponse acceptée pour vérifier le type d'image comme suit,

 if (exif_imagetype($_POST['text']) == IMAGETYPE_PNG) {
     $filename = './images/'.basename($_POST['text']);
     file_put_contents($filename, $content);
 }

À partir de l'exemple ci-dessus, je montre comment vérifier les images png avant de télécharger les fichiers et pour plus de types de contenu, vous pouvez trouver ici .

0
Janith Chinthana

file_put_contents() requiert que le premier paramètre soit un nom de fichier et non le chemin.

0
heyanshukla
file_put_contents($img_path, $content); 

A quoi mettez-vous ?? Je pense que vous avez commis une erreur avec get et put. ou manquant pour spécifier le chemin complet, y compris le nom du fichier et son extension

0