Copier le fichier distant à l'aide de Guzzle
Je suis en train de copier un fichier distant (image PNG, GIF, JPG ...) à mon serveur. J'utilise Bouffer depuis j'ai parfois 404 avec copier() même si le fichier existe et j'ai aussi besoin de faire une authentification basique. Ce script est dans un long script lancé dans la commande déclenchée par une tâche cron.
Je suis assez nouveau à Bouffer et j'ai réussi à copier l'image, mais mes fichiers ont tort de type mime. Je dois être en train de faire quelque chose de mal ici. Merci de me suggérer un bon moyen de le faire (y compris la vérification de la réussite/l'échec de la copie et le type mime à vérifier). Si le fichier n'a pas de type mime je pop une erreur avec des détails et des informations.
Voici le code:
$remoteFilePath = 'http://example.com/path/to/file.jpg';
$localFilePath = '/home/www/path/to/file.jpg';
try {
$client = new Guzzle\Http\Client();
$response = $client->send($client->get($remoteFilePath)->setAuth('login', 'password'));
if ($response->getBody()->isReadable()) {
if ($response->getStatusCode()==200) {
//is this the proper way to retrieve mime type?
//$mime = array_shift(array_values($response->getHeaders()->get('Content-Type')));
file_put_contents ($localFilePath , $response->getBody()->getStream());
return true;
}
}
} catch (Exception $e) {
return $e->getMessage();
}
Quand je fais cela mon type mime est défini à application/x-vide
Aussi ça ressemble quand le statut est différent de 200 Bouffer va automatiquement lancer une exception. Comment puis-je arrêter ce comportement et de vérifier l'état de moi-même si je peux le message d'erreur personnalisé?
EDIT: C'était pour Bouffer 3.X
Maintenant, c'est comment vous pouvez le faire à l'aide de Bouffer v 4.X (fonctionne aussi bien avec Bâfrer 6)
$client = new \GuzzleHttp\Client();
$client->get(
'http://path.to/remote.file',
[
'headers' => ['key'=>'value'],
'query' => ['param'=>'value'],
'auth' => ['username', 'password'],
'save_to' => '/path/to/local.file',
]);
Ou à l'aide de Bouffer de flux:
use GuzzleHttp\Stream;
$original = Stream\create(fopen('https://path.to/remote.file', 'r'));
$local = Stream\create(fopen('/path/to/local.file', 'w'));
$local->write($original->getContents());
Cela ressemble beaucoup. Est-il mieux/solution adéquate lors de l'utilisation de Bouffer 4?
source d'informationauteur Spir
Vous devez vous connecter pour publier un commentaire.
Votre code peut être simplifié beaucoup de choses. Mon exemple de code ci-dessous sera diffuser le corps de la réponse directement au système de fichiers.
Un système de fichiers type mime?
Bouffer lèvera une exception pour les mauvaises réponses comme 4xx et 5xx. Pas besoin de désactiver cette option. Il suffit de prendre une exception et traiter l'erreur.
Regarder ce post:
ici, vous devez envoyer la demande de votre "post"
et obtenir
et ici, vous n'avez pas besoin d'envoyer la demande,
et ici vous trouverez un grand nombre de documents, vous devez avoir bouffer 6 pour le faire, et si vous utilisez GOUTTE dans le même temps vous aurez besoin de goutte 3.1, mise à jour de votre besoin dans votre compositeur.json