カテゴリー : PEAR

[PEAR] Services_Amazon にて setProxy でプロキシ情報を設定する方法

PEAR の Services_Amazon クラスを利用するとエラーが発生しました。
 

■ エラー内容

Amazonの情報取得に失敗しました(HTTP_Request::sendRequest failed: Malformed response)

原因は、認証プロキシを利用しているせいでした。

よって、Services_Amazon クラスの setProxy で proxy 情報をセットしてあげる必要があります。

$amazon = new Services_Amazon($access_key_id, $secret_access_key);
$amazon->setProxy($host, $port, $user, $pass);

以下、Services_Amazon のマニュアルから引用。

setProxy

void setProxy( string $host, [int $port = 8080], [string $user = null], [string $pass = null])

Sets a proxy
Access: public

Parameters:

string $host — Proxy host
int $port — Proxy port
string $user — Proxy username
string $pass — Proxy password

[引用元]:Docs For Class Services_Amazon

以上です。

[PEAR] Strict、Deprecated error や Warning を表示させない設定方法

PHPのPEARを使い始めたら、早速エラーが大量に出てきました。

エラーの出力設定を変更できるようなので

Deprecated: Assigning the return value of new by reference is deprecated in ~

とか

Strict Standards

というエラーが出ます。

PHP: error_reporting – Manual

デフォルトの設定では以下のようになっています。

error_reporting = E_ALL | E_STRICT

これを以下のように、E_STRICT と E_DEPRECATED のエラーが出ないように設定すればOKです。

error_reporting = E_ALL & ~E_DEPRECATED

設定後に、Apacheを再起動して設定を反映します。

# /usr/local/apache2/bin/httpd -k graceful

error_reporting の設定が反映されているかの確認は # php -i | less コマンドで

Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => (none)

Loaded Configuration File が none となっているため、php.ini を読み込めていないようです。

何故か、僕は/usr/local/lib/php/php.ini に置いていたため読み込めていませんでした。

ちゃんと/usr/local/lib/ディレクトリ直下にphp.ini を移動させると、設定が反映されているようです。

Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => /usr/local/lib/php.ini
# php -i | grep error_reporting
error_reporting => 22527 => 22527

以上です。

【参考】
php5.3でDeprecatedエラーに遭遇 « kawama.jp

神経研メディアセンター: PHP5の安全設定

PHP5でPEAR::DBを教本通り使ったらStrict Standardsエラーが発生した件 – TMD45LOG!!!

PEARの呼び出しなどで出るStrict errorやWarningを一時的に消す方法 – Layer8 Reference

php5.3 Assigning the return value of new by reference is deprecated – 為せば成る・・・かもしれない

[PEAR] install を使うための認証付きproxy 用の設定方法

pear で install したらエラーが発生しました。

原因は、認証付きproxy 用の設定をしていなかったためです。

# pear install Services_Amazon-0.8.0

■ エラー内容

No releases available for package "pear.php.net/Services_Amazon"
install failed

pear の設定を確認します。

# pear config-show
 
Configuration (channel pear.php.net):
=====================================
Auto-discover new Channels     auto_discover    <not set>
Default Channel                default_channel  pear.php.net
HTTP Proxy Server Address      http_proxy       <not set>
PEAR server [DEPRECATED]       master_server    pear.php.net
.
.
.

config-set http_proxy で認証付きプロキシの情報を設定します。

# pear config-set http_proxy http://user@pass:proxyserver:port/

user/pass/proxyserver/port は自分のもの。

設定後、 # pear config-show して、HTTP Proxy Server Address http_proxy の部分に設定した http://user@pass:proxyserver:port/ が入っていれば設定は反映されています。

以上です。

[PEAR][MySQL] Column count of mysql.proc is wrong.

 

PEAR::DBを使ってUPDATE文を発行したらエラーが発生しました。
 

■ getMessage()でのエラー内容

DB Error: unknown error
 

このエラー内容では何の手掛かりにもならないので、もっと詳しいエラー内容をgetDebugInfo()で取得してみました。
 

・参考:わすれるまえのきろく DB Error: unknown error
 

■ getMessage()・・・『DB Error: unknown error』

■ getDebugInfo()・・・『INSERT INTO テーブル名 (列名1,列名2,列名3) VALUES(値1,値2,値3) [nativecode=1364 ** Field ‘列名4’ doesn’t have a default value]』
 

エラーをgetDebugInfo()で取得してみると、自分のエラーは以下の通りでした。
 

■ getDebugInfo()でのエラー内容

UPDATE users SET friend_num = 1WHERE (id=45) [nativecode=1558 ** Column count of mysql.proc is wrong. Expected 20, found 16. Created with MySQL 50077, now running 50152. Please use mysql_upgrade to fix this error.]
 

「Column count of mysql.proc is wrong.」で検索してみると、mysql_upgradeをすれば解決すると書いてあったのですが、自分の場合、SQL文で半角スペースを含んでいない箇所があったせいでした。。。
 

以上です。
 

【参考】

葛藤・悶絶なる日々 MySQLで突然、Column count of mysql.proc is wrong. Expected 20, found 16.がでたら

MySQL :: MySQL 5.1 リファレンスマニュアル :: 4.5.4 mysql_upgrade — MySQL アップグレードのテーブル チェック
 

[PEAR] Amazon API の ItemSearch を使った複数キーワードでの検索方法

 

Amazon API を使える PEAR :: Services_Amazon の ItemSearch を使って、複数キーワードでの検索をしてみました。
 

・参考:Docs For Class Services_Amazon
 

ItemSearch の使い方サンプルは以下のようになっています。
 

1
2
3
4
5
6
7
8
9
10
11
<?php
 
$amazon = new Services_Amazon('[your Access Key ID here]', '[your Secret Access key here]');
 
$options = array();
$options['Keywords'] = 'sushi';
$options['ResponseGroup'] = 'ItemIds,ItemAttributes,Images';
 
$result = $amazon->ItemSearch('Books', $options);
 
 ?>

これの $options[‘Keywords’] の部分を下記のようにすれば、「書籍名」「著者名」「出版社名」と複数のキーワードで検索できます。
 

1
2
3
4
5
$title = '検索したい書籍名';
$author = '検索したい著者名';
$publisher = '検索したい出版社名';
 
$options['Keywords'] = $title . $author . $publisher;

 

このとき、キーワードに含まれる「書籍名」「著者名」「出版社名」は、検索時にAmazon側での区別はされていません。
 

Amazonには、これらの文字列3つを連結した文字列の内容で検索しています。
 

以上です。