[php]phpQueryをcomposer経由でインストールする

PHPからwebページのスクレイピングを行うための有名なライブラリにphpQueryがあります。
phpQueryを使用すると、htmlに対してjQueryのようなセレクタで、取得したいタグの検索などが簡単に行えるので便利です。

今回はこのphpQueryをcomposer経由でインストールしたうえで、簡単な動作確認を行ってみました。

作業手順


phpQueryパッケージをインストールする


まず、composer self-updateコマンドでcomposer自身のアップデートを行ったうえで、requireコマンドを使用してphpqueryパッケージのインストールを行います。

composer self-update
composer require electrolinux/phpquery

composer reuireでインストールができたら、composer infoコマンドで正しくインストールできたか確認します。今回試した時点ではver0.9.6が最新のバージョンでした。

> composer info electrolinux/phpquery
You are running Composer with SSL/TLS protection disabled.
name     : electrolinux/phpquery
descrip. : phpQuery is a server-side, chainable, CSS3 selector driven Document Object Model (DOM) API based on jQuery JavaScript Library
keywords :
versions : * 0.9.6
type     : library
license  : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText
source   : [git] https://github.com/electrolinux/phpquery.git 6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a
dist     : [zip] https://api.github.com/repos/electrolinux/phpquery/zipball/6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a 6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a

names    : electrolinux/phpquery

インストールしたパッケージの動作確認を行う


動作確認のために簡単なプログラムを作ってみます。
なんでもよいのですが、今回はcomposerのパッケージが検索できるサイトから、名前に”helloworld”を含むパッケージの一覧を取得してみます。

一度ブラウザでアクセスしてみるとわかるのですがhttps://packagist.org/search/のページへ、クエリストリング?q=helloworldを付与したURLで検索が結果が表示され、各パッケージのタイトルはh4タグの中に記載されています。

<?php
require 'fuel/vendor/autoload.php';

// composerのパッケージ一覧から、名前に"helloworld"を含むパッケージを取得
$htmlStr = file_get_contents("https://packagist.org/search/?q=helloworld");

// htmlテキストをスクレイピングして、h4タグの一覧を取得
$dom = phpQuery::newDocument($htmlStr);
$titles = pq($dom)->find("h4");

// 取得したすべてのh4タグタイトルを画面に出力
foreach( $titles as $title ) {
    echo trim( pq($title)->text() ) . "\n";
}

上記のプログラムを実行してみた結果が以下の通りです。
想定通り、helloworldな名前を持つパッケージたちが取得できました。

> php test_phpquery.php

reps_demo/helloworld
brooklab/helloworld
abbert/helloworld
dnconcept/hello-world
nsdhami/hello-world
bagwaa/hello-world
vsonx/hello-world
hurad/hello-world
vdrizheruk/hello-world
eric-clinton/helloworld
wyanez/zf2-helloworld
mshige1979/helloworld
joomlatools/com_helloworld
digitalformula/hello-world
donut/hello_world



[FuelPHP] composer updateでfuelphp/upload 2.0.6のアップデートエラーが出るとき

FuelPHPのフレームワーク使用時にcomposer updateを実行した際、下記のエラーがでてパッケージをアップデートできない場合があります。

> composer update

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - fuelphp/upload 2.0.6 requires ext-fileinfo * -> the requested PHP extension fileinfo is missing from your system.
    - fuelphp/upload 2.0.6 requires ext-fileinfo * -> the requested PHP extension fileinfo is missing from your system.
    - Installation request for fuelphp/upload 2.0.6 -> satisfiable by fuelphp/upload[2.0.6].

  To enable extensions, verify that they are enabled in your .ini files:
    - C:\path\to\php.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

上記のエラーはphp自体の環境でphp_fileinfoのエクステンションが有効になっていない場合に出力されるエラーです。この場合は、エラーメッセージにある通りphp.iniの下記設定を変更することでcomposer updateが可能になります。

;extension=php_fileinfo.dll



extension=php_fileinfo.dll



[php]composer self-updateでエラー[Composer\Downloader\TransportException]が出るとき

composerを使用していてcomposer self-updateコマンド実行時に下記のエラーが出る場合があります

[Composer\Downloader\TransportException]
Your configuration does not allow connections to http://getcomposer.org/versions. 
See https://getcomposer.org/doc/06-config.md#secure-http for details.

このエラーが出る理由ですが、composerはファイルのダウンロードをSSL対応したサイトからのみ許容しているのですが、SSL暗号化がされていないサイトへのアクセスが検出されたためです。本来であればSSL経由でアクセス可能なように対処すべきですが、一時的にこのチェックをOFFにして動作させたい場合もあります。

このような場合、下記のコマンドを実行してsecure-httpの設定値をfalseにすれば、self-updateを実行できます。

composer config --global -- secure-http false

設定された内容は、下記のコマンドでチェック可能です。

composer config --list



[php]composer self-updateでエラー[required for SSL/TLS protection]が出るときの対処法

PHPでcomposerのアップデートを行った時、opensslのライブラリでSSL/TLS protectionエラーが出る場合があります。※下記の例の”composer self-update”は、windowsの場合は環境によって”php.exe composer.phar self-update”になる場合もあります。

> php.exe composer.phar self-update

[RuntimeException] 
The openssl extension is required for SSL/TLS protection 
but is not available. 

If you can not enable the openssl extension, 
you can disable this error, at your own risk, 
by setting the 'disable-tls' option to true.

このエラーに対して一時的にSSLのチェックを外したい場合は、下記のコマンドでdisable-tlsのフラグを立てればOKです。

composer config --global -- disable-tls true

上記のコマンドを実行すると、下記のフォルダに設定内容が登録されます
(configの場所はcomposer config --list -vvvでverbose出力すれば確認できます)

C:\Users\ユーザ名\AppData\Roaming\Composer\config.json

設定内容がconfigにセットされているかは、下記のコマンドで確認できます。

composer config --list