質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2159閲覧

【PHP PhantomJS】Webページのキャプチャを撮りたいのですが、terminalでは成功するのにブラウザから同じファイルを叩いても失敗してしまいます

taro_nii_chan

総合スコア207

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/11/07 07:47

編集2017/11/07 11:36

前提

MacOSX sierra
MAMP
Chromeにて確認
PHP PhantomJS インストール済み

やりたい事

指定したURLの画面キャプチャを撮りたいのですが、ブラウザで何度やっても上手く行きませんでした。試しにterminalから実行するとあっさり撮れました。

以下はそのコードの枝葉を端折って結果の出力もシンプルにしたものですが、ブラウザとterminalでやはり結果ははっきり分かれます。
ブラウザでは
failed.
terminalでは
succeed.
と表示されます。
実際、キャプチャ画像が生成されるかどうかも同じ結果です。

ブラウザで成功するために何か出来ることはありますでしょうか?
よろしくお願いします。


get_capture.php

php

1<?php 2 3// set_time_limit(0); 4 5require_once('vendor/autoload.php'); 6 7use JonnyW\PhantomJs\Client; 8 9$url = "http://www.nihonkiin.or.jp/"; 10 11$png_file = "./capture/capture_" . $time_stamp . ".png"; 12$client = Client::getInstance(); 13$client->getEngine()->setPath('vendor/bin/phantomjs'); 14// $client->getEngine()->setPath('/usr/local/bin/phantomjs'); 15 16$request = $client->getMessageFactory()->createCaptureRequest($url); 17$response = $client->getMessageFactory()->createResponse(); 18 19// サイズ指定 20$width = 1200; 21$height = 1; 22$request->setViewportSize($width, $height); 23 24$request->setOutputFile($png_file); 25$client->send($request, $response); 26 27if ($response->getStatus() === 200) { 28 // echo $response->getContent(); 29 // header('Content-type: image/png'); 30 // readfile($png_file); 31 echo "succeed!"; 32} else { 33 echo "failed."; 34}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

このへんをフルパスにしてみてはどうでしょうか?

php

1$png_file = "./capture/capture_" . $time_stamp . ".png"; 2 3$client->getEngine()->setPath('vendor/bin/phantomjs');

php-phantomjsもいいと思いますが、デバッグしにくいのが難点です。
どこでミスってるのかよく分からないときがあるんですよね。
なので私はphpから使うときは、

php

1exec("casperjs file.js", $resultData, $result);

などとしています。
外出ししとけばテストも独立してできますし。

投稿2017/11/07 14:44

ooeok

総合スコア469

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taro_nii_chan

2017/11/07 20:42

結論から言いますと、出来ました。 ただ、しばらく出来た理由が分かりませんでした。 何もいじってなかったからです。 で、そう言えば出来る前に2〜3回出来なかったことがったなと思い、 何故だろうと考えたらMacを再起動したんだったことを思い出しました。 Apacheが立ち上がってないのでlocalhostが見れないのは当たり前だと。 で、Apacheを立ち上げたら成功しちゃったんです。 つまり、恐らくですが、Apacheを再起動するという基本的なことをやってなかったせいなのかなと思っています。 フルパスは一応やっていました。 でも外出しにするという方法は知りませんでした。 とっても今後のためになりました。 ありがとうございます。 なので自己解決ではなくベストアンサーとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問