カテゴリー別アーカイブ: php

さくらのレンタルサーバーにPEAR(ピア)をインストールするメモ書き。

ロリポップ!からさくらのレンタルサーバにサイトを1つ移転したところ、PHPのPEARにあるキャッシュライト(Cache_Lite)という物がなくて、エラーが出た。ロリポップの時もキャッシュライトは無かったので自分でインストールしたんだけど、さくらでのやり方がわからず手間取った。

以下の方法でキャッシュライトをインストールしたら、後はサーバー内のフォルダをまるごとコピーするだけで何も他は設定なしでプログラムは動いた。同じ手間は二度としたくないので、自分用にメモ。

以下、さくらのレンタルサーバーにPEARを入れて、PEAR(ピア)のキャッシュライト(Cache_Lite)をインストールするまでの方法。

PEARのインストール
さくらのレンタルサーバーにはPEARが入っているけど、キャッシュライトは入っていない。よって新しいPEARのインストールから始める。

http://pear.php.net/go-pear
ここから、右クリックで名前を付けて保存を選び、「go-pear.php」として保存。
FFFTP(FTPツール)でサーバーにアップロード。
場所は/home/ユーザー名/wwwのwww内に置く。

ブラウザでgo-pear.phpを開く。www直下へのアクセスは、一番最初に決めたデフォルトのアドレスでアクセスできるので、デフォルトアドレス/go-pear.phpでOKだった。忘れてる場合は会員メニュー画面のドメイン設定あたりを見ればわかる。

上手く行けば、緑色のgo-pearの画面が出てくるのでNEXTをクリック。

設定画面が出てくるので、1と11番目だけ変更(この辺は記憶が曖昧・・)。
1は、「/home/ユーザー名/pear」としてwwwフォルダの上に置き、ブラウザからアクセスできないようにする。
11は、「/usr/local/bin/php」。
これでインストールをクリックでOK画面が出た。下に赤色で警告が出るのは直接アクセスできないからで、これはわざとアクセス出来ない場所に設定したので問題ないらしい。

さくらのサーバーのコントロールパネル→PHP設定の編集→php.ini 設定ファイル編集より
include_path=”.:/home/ユーザー名/pear/PEAR”
としてパスと言われるものを通す。

これで取り敢えずPEARのインストールが終わり。

TERATERMを使う

次にキャッシュライトのインストールだけど、これにはコマンドを打ち込んだりする必要があるらしく、コマンドの意味が最初わからなかった。どうもサーバーをいじるために別のソフトがいるらしく、「Tera Term」というソフトが有名らしいのでこれをインストール。
TERATERMの使い方とか全然知らないけど、やりたいことはわかってるので、必要なことだけ調べた。

設定は簡単で、TERATERMのソフト立ち上げて

ホスト 初期ドメイン
アカウント アカウント名
パスフレーズ サーバパスワード

以上さくらのレンサバの情報を入れればサーバーにつながる。

きちんと繋がると文字がづらづら出てきて、最後の行に「%」が表示される。
この「%」の後にコマンドを入れるといろいろ操作できるらしい。

すでにPEARをインストールしているので、PEARと文字を打ってエンターを押すと、PEARを操作するためのコマンドのリストが表示される。これが表示されればPEARのインストールは上手く行っている。もしエラーが出るならどこか間違っている。

問題なければ、キャッシュライトのインストールを始める。

キャッシュライト(Cache_Lite)のインストール手順

さきほどのTERATERM(テラターム)で接続した状態から、インストールするためのコマンドを打ち込む

%pear install Cache_lite

しかし「php_dir for channel “pear.php.net” is not writeable by current user」とかいうエラーが出た。

%pear config-set php_dir /home/アカウント/www/cgi-bin

とすることで書き込み可能になる。しかしまたエラーが出たので

  pear config-set php_bin /home/アカウント/www/cgi-bin
  pear config-set bin_dir /home/アカウント/pear/bin
  pear config-set doc_dir /home/アカウント/pear/PEAR/docs
  pear config-set ext_dir /home/アカウント/pear/PEAR/extensions
  pear config-set php_dir /home/アカウント/pear/PEAR
  pear config-set cache_dir /home/アカウント/pear/PEAR/cache
  pear config-set data_dir /home/アカウント/pear/PEAR/data
  pear config-set test_dir /home/アカウント/pear/PEAR/tests
  pear config-set download_dir /home/アカウント/pear/temp/download
  pear config-set temp_dir /home/アカウント/pear/temp

いろいろ調べて上記をすべて打ち込んでみたらインストール完了した。ロリポップから移転したファイル(キャッシュライト使用)も何も書き換えずに動きた。

上記のPEARとキャッシュライトのインストールに関しては、エラー表示が出ても検索すればすべて解決方法はわかった。PEARのキャッシュライトはたしかTERATERMを使わずにブラウザからインストール出来た気もするけど、どのみちTERATERMは使う機会がありそうなので使ってみた。以上さくらのレンタルサーバーにPEARをインストールしてキャッシュライトを使う方法。

【関連リンク】
さくらのレンタルサーバ

ロリポップ!

Google Geocoding API V3への対応とか

Google Geocoding API V2(グーグル ジオコーディング V2)がいつの間にかサポート終了してた。
前のURLを利用するとエラーが出るようになってたので、新しいV3に対応できるようにかなり久々にソースをいろいろいじってみた。

プログラムはできるだけやりたくないので、最短の方法を探してみた。

V2の時はXMLでレスポンスを受けてたけど、XMLはレスポンスが長いので、JSON推奨とのことでJSONを利用。
専用のクラスを作っていたのでこれを書き換えるだけで対応できるようにした。

V2からV3に対応させるために書き換えるのは、URL部分と、JSONに対応させる部分だけ。
使用したのはPHP

JSONは、

file_get_contents

でレスポンスを受け取って、

json_decode

で配列に入れる、この時tureを付けるのを忘れない。

データの取り出し方は$geoにjson_decodeのデータを入れたとしたら、

$geo[status]

でstatusの中身取り出せる。アドレスは複数返ってくる場合があるので

$results = $geo[results][0];

として一個目を取り出す。

配列の下にたどっていくには

$results[geometry][location][lat]

みたいにすればOKだった。

Google API Expertが解説する Google Maps APIプログラミングガイド
Google Maps APIプログラミング入門
完全解説地理情報プログラミングの基本と応用 [ 川俣晶 ]

MYSQLのTRUNCATEとDELETEの違いとか、AUTO_INCREMENTの消し方

PHPでMYSQLを使っていて、DELETEでテーブルの内容を消しても、なぜか次にデータを入れた時、AUTO_INCREMENTの値が1からではなくて、テーブルのデータを消す前の数字からの続きになってしまう。

原因がわからずいろいろいじったところ、PHPMYADMINにあるテーブル内容削除を使うと、綺麗にAUTO_INCREMENTの値も削除された。

PHPMYADMINにあるテーブル内容削除のコマンドは、DELETEではなくて、TRUNCATEとなっている。

調べみたら、TRUNCATEだとAUTO_INCREMENTの値も消されるが、DELETEだと保持されるみたい。

MYSQLで使えないテーブルのカラム名

久しぶりにMYSQLをいじっていたんだけど、何度見なおしてもエラーが出てデータのインサートができないので泣きそうになった。

次の日、頭を冷やして冷静に考えたら、もしや、と思い、予約後というか、カラム名として使えない文字を調べたら、

desc

は予約後に入っていた。そういえばこれってソートの時とかに使う単語だなぁとなんとなく思いつつ、適当に使ってしまっていた。

他の名前に変えたらあっさり成功。

file_get_contentsの代わりにcurlを使う

PHPでfile_get_contentsを使うとやけに遅いので他に方法がないか調べてみた。
curlを使う方が早いとのことなので、試しに使ってみると、目で見てわかるくらい早くなった。
使い方は以下。簡単。curlは格安レンタルサーバーでも使えるところがほとんど。

$curl=curl_init();
curl_setopt ($curl,CURLOPT_URL,$surl);
curl_setopt ($curl,CURLOPT_HEADER,0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$xmlStr = curl_exec ($curl);
curl_close ($curl);

これで$xmlStrに取り出した物が入る。

もしCSVファイルの場合だと。上のようにしたあと。

$fp = tmpfile();
fwrite($fp,$xmlStr);
rewind($fp);

として

fgetcsvを使って取り出せる。