PHP」タグアーカイブ

PHPからMySQLサーバーに接続する関数がNo such file or directoryを返すときの対処法 [(全部俺)何でも Advent Calendar 2013 9日目]

この記事は「(全部俺)何でも Advent Calendar 2013」の9日目です。(1日遅れ

PHPとMySQLサーバーをどちらもディストリビューションのパッケージマネージャ(yum, apt等)でインストールしている場合にこの問題は起こりにくいとは思いますが、どちらかをソースコードからインストールするとmysql_connect(), mysqli_connect(), pdo_mysql_connect()でエラー “No such file or directory” となってしまいます。
この記事では3種類の解決法をご紹介しますが、他のサイトではこのうち1種類のみを紹介している場合がほとんどです。どの方法が適切かは状況によると思いますので、自己判断でお願いします。

続きを読む

PEAR/XML_RPC2がプロキシ設定を無視しているバグを踏み抜いた

卒業研究で製作して今調整中のライブラリがあるのですが、そのサンプルのために利用しているPEARのXML_RPC2でプロキシが利用できないバグを踏んでしまいました。
GithubのリポジトリPull Requestを送ってあるのでマージ待ちですが、このバグの概要と修正箇所を記録しておきます。

概要

XML-RPCのWebサービスをPHPで利用する方法の1つとして、PEARのXML_RPC2パッケージの利用があります。詳しい使い方については公式のドキュメントを参照していただくとして、HTTPプロキシ経由で利用する場合は以下のようなコードになります。

require_once 'XML/RPC2/Client.php'; 
$wsdl = 'http://example.com/xmlrpc-wsdl.xml'; 
$option = array('proxy' => 'scheme://proxyhost:port');
 
$client = XML_RPC2_Client::create($wsdl, $option);

今回のバグは、このproxyオプションを設定したとしても、内部で使われているXML_RPC2_Util_HTTPRequestオブジェクトのsendRequest()メソッドで設定値が参照されないことによりプロキシ設定が無視されてしまいます。

修正

XML/RPC2/Util/HTTPRequest.phpを次のように変更します。

Githubの方が見やすいかもしれません。こちらからどうぞ。

HTTPRequestオブジェクトのsendRequest()メソッドで、定義されていない配列変数$paramを参照しているため、コンストラクタやXML_RPC2_Client::create()で設定したプロキシ設定が完全に無視されてしまっています。
コンストラクタと全く同じ処理が走っているので、このような形で修正してみました。

まとめ

いくら検索してもプロキシが通らなくて最終的にコードを追う羽目になり発見した次第です。

PEARには自分で実装するには骨が折れるような機能を提供しているにもかかわらずメンテナンスされていないパッケージが幾つかあります。
XML-RPCという形式がそもそも一般的でないという実情による面が大きいとは思いますが、せっかくGithubにコードを移しているのですから、必要としている人が積極的にPull Requestを送ってよりよい形にしていけるといいのではないでしょうか。

[CakePHP][覚え書き] find()の引数でデータをソートして取得したかった

んです。

class HogeController extends AppController {
    public $uses = 'Hoga';
    function index() {
        $this->Hoga->find('all', array('order' => 'date'));
    }
}

こんな感じに、find()の第2引数にオプションとして放り込めばソートできました。
orderの値にはソートするフィールドを指定します。

参考までに、実行されているSQL文はこんな感じでした。

SELECT `Hoga`.`id`, `Hoga`.`date`, `Hoga`.`name`, `Hoga`.`description`, `Hoga`.`created`, `Hoga`.`modified` 
FROM `hoga` AS `Hoga` WHERE 1 = 1 ORDER BY `date` ASC

参考リンク