‘Silex’ タグのついている投稿

タスクスケジューラとPHPのコンソールアプリケーション

PHP5.3+Silexを使って、Windows上で定期的に処理をするコンソールアプリケーションを作っていたのですが、タスクスケジューラが起動するタイミングで、デスクトップにコマンドプロンプトのウィンドウ(DOS窓)が表示されてしまう現象に悩んでいました。

ウィンドウを表示させない方法として、ショートカットを作成してウィンドウ最小化するという手で試してみたのですが、taskeng.exeというタイトルのウィンドウが出たままになって止まってしまう状況でした。(多分PHPファイルを引数として認識していない)

結論としては簡単で、php.exeの代わりにphp-win.exeを使うだけです。

PHP: CLI と CGI – Manual

php-win.exeはコンソールを表示させないので、これを実行ファイルとしてタスクスケジューラに登録すればOKです。

ついでにタスクスケジューラに登録する方法も書いておきます。5分おきにPHPを実行し続けるタスクをコマンドプロンプトから登録するコマンドです。最後の/Fは確認メッセージの抑制。

schtasks /create /tn "Test PHP" /tr "C:\php\php-win.exe C:\hoge\console.php args" /sc minute /mo 5 /it /F

削除はこちら。

schtasks /delete /tn "Test PHP" /f


Silexで外部APIにHTTP Requestする

最近Silex始めました。

まずは外部のWebServerにリクエストを投げる方法です。軽量なWebClientであるBuzzを使います。gitでBuzz本体とProviderをダウンロードします。

$ cd vendor/
$ git clone https://github.com/kriswallsmith/Buzz.git Buzz
$ cd Buzz/
$ git checkout v0.5
$ git submodule update --init
$ cd ..
$ git clone https://github.com/marcw/silex-buzz-extension.git silex-buzz-extension

src/bootstrap.phpに追加します。

$app['autoloader']->registerNamespace('MarcW', __DIR__ . '/../vendor/silex-buzz-extension/lib');

$app->register(new MarcW\Silex\Provider\BuzzServiceProvider(), array(
    'buzz.options' => array(
    ),
    'buzz.class_path' => __DIR__ . '/../vendor/Buzz/lib',
));

これで準備完了です。あとはアプリケーションから

$app['buzz']->getClient()->setTimeout(30);
$response = $app['buzz']->get('http://www.google.co.jp');

echo $app['buzz']->getLastRequest()."\n";
echo $response;

として呼び出すことができます。Buzzのデフォルトのタイムアウトが5秒で、早すぎたので30秒に変更しておきました。