July 20, 2014

Goutteでダウンロードしたファイルの内容を取得する

PHPのスクレイピングライブラリで有名なGoutte https://github.com/fabpot/Goutte で、ダウンロードしたファイルの内容を取得する手順メモです。

Goutteをインストールします。
$ composer require fabpot/goutte:2.*
以下、ファイルをダウンロードするサンプルです。
<?php

require_once './vendor/autoload.php';

// Goutte\Client のインスタンスを生成する
$client = new Goutte\Client;

// ダウンロードしたいファイルがあるURLにアクセスする
$client->request('GET', 'http://example.com/download.php');

// レスポンスのオブジェクトを取得する
/** @var Symfony\Component\BrowserKit\Response $response */
$response = $client->getResponse();

// コンテンツのオブジェクトを取得する
/** @var GuzzleHttp\Stream\Stream $content */
$content = $response->getContent();

// seek(0) して getContents() するとファイル内容を取得できる
$content->seek(0);
echo $content->getContents();
これで、ダウンロードしたファイルの内容を取得出来ました。ポイントは seek(0) です。これをしないと、どうにも取得できませんでした。

尚、ダウンロードさせる側に、以下のPHPファイルを置いて確認しました。
<?php

// download.txt は別途用意する
$file = 'download.txt';
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$file);
header('Content-Length: ' . filesize($file));
readfile($file);

No comments:

Post a Comment