Masayuki Araki

MT6 Dynamic MTML で require_once が実行されない

0

MT6 にて Dynamic MTML で PHP を動かそうと思っています。
やりたいことは、Goutte でのスクレイピングです。

問題点は、インデックステンプレートにおいて、
goutte.phar を require_once で読み込みたいのですが、
実行されずに、require_once 以降の PHP での処理がされない状態です。

以下、コードになります。
―――――――――――――――――

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>sc</title>
<link rel="stylesheet" href="./style.css" type="text/css">
</head>
<body>
<article>
<h1>スクレイピング</h1>
<h2><mt:date></h2>
<?php
set_time_limit(180);

// Goutte 読み込み
require_once( 'http://www.hoge.com/scraping-hoge/goutte.phar' );

// 見出し
$fp = fopen("scraping.csv","a");
$column = "hoge1,hoge2,hoge3\r\n";
mb_convert_variables("sjis-win", "utf-8", $column);
fwrite($fp, "$column");
fclose($fp);

echo "end";
?>
</article>
</body>
</html>
―――――――――――――――――

※インデックステンプレートによって吐き出された、
上記コードが書かれたPHPファイル、
goutte.phar、
Goutte-masterフォルダ は、
同じディレクトリにあります。

※require_once を除くと、最後の echo まで処理されます。

※require_once の後に use Goutte\Client; を追加すると、
画面が真っ白になり、ソースでは 内は何もなくなります。


MTに関しては初心者となります。
足りない情報などがありましたら、仰ってください。
何卒、宜しくお願い申し上げます。

返信(3)

| 返信する
  • >Masayuki Arakiさん
    こんにちは。

    MTもDynamicMTMLも関係なく、PHPの仕様です。
    requireにURLを渡すと、そのURLにアクセスした結果を読み込むことになります。
    アクセス先がPHPであれば、PHPを実行した結果が読み込まれます。

  • 壱さま

    こんにちは、ありがとうございます!

    requireの仕様で、PHPファイルを読みこめば、
    PHPを実行された結果が表示されることは理解しました!

    ということは、PHP実行の結果は、
    "実行以降は真っ白な画面が表示される"コード
    "実行以降、その後に書かれた全てのコードを実行しない"コード
    のいずれかが実行されているということでしょうか。

    仕様は理解できたのですが、なぜそのせいで今の状態なのかが、
    ご回答から汲み取ることができませんでした。

    申し訳ありませんが、よろしくお願いいたします。

  • >Masayuki Arakiさん
    こんにちは。

    requireでGoutteのライブラリを読み込もうとしていますが、読み込むファイルをURLで指定しているために、そのページにHTTPアクセスした結果を読み込む処理になってしまい、ライブラリが読み込まれず、エラーになっていると思います。
    そのため、requireから後の処理が実行されていないものと思われます。

    また、お使いのサーバーでは、PHPの設定で、エラーになった時には何も出力しないようになっていると思います。

    requireでライブラリを読み込む場合は、URLではなく、サーバー上でのファイルのパスを指定する必要があります。
    今回の例だと、MTで出力したPHPと同じディレクトリにgoutteもあるとのことですので、requireを以下のように変えれば良いはずです。

    require('goutte.php');

返信する