さくらインターネット


さくらサーバーでpearのインストール 2016年10月版

さくらのレンタルサーバーをプラン変更した際、 pear の再設定に手間取ったので覚書。
php ファイル で、DB ライブラリとPager ライブラリを利用しているため、それぞれを利用可能にする必要があった。さくらのレンタルサーバーには、もともと pear がインストールされているが件のライブラリ は入っていない。もともと入っている pear は共有部分のに入っているため、ライブラリをインストールするには、 pear 自体も ローカル部分にインストール必要があった。

1.さくらサーバーに pear のインストール

pear のインストール方法はいくつかあるが、今回は go-pear を使った。
go-pear は古くてインストール途中で止まるものがインターネット上にたくさんある。

2016年10月3日現在有効な pear-go

上記リンクを右クリックして www フォルダ以下に「go-pear.php」という名前で保存。その後、ブラウザからアクセスする。

設定項目を埋めて、インストールボタンを押す。設定項目のインストール先は www フォルダ(Installation prefix($prefix))直下がデフォルトのようだが、移行元の pear が「/home/ユーザー名/」の直下だったので、同じようにした。

設定の参考にしたページ こちら

インストールは無事完了したが、Warning が出た。

----------------------------------------------
Warning: Can not determine the URL of the freshly installed Web Frontend
(file: /home/ユーザー名/index.php).
Please access it manually !
----------------------------------------------

これは「インストール後に生成された index.php ファイルが www フォルダより上にあるためアクセスできないよ」という内容のもの。ブラウザからライブラリをインストールするには、index.php へのアクセスが必要なので、www フォルダ直下に「gopear」というフォルダを作って、index.php ファイルをコピーした。

2.ライブラリのインストール

ライブラリをインストールするにはターミナルから操作する方法と 件の index.php へアクセスして操作する方法がある。

最初ターミナルからサーバーにログインしてコマンドを実施した

//DB ライブラリをインストールするコマンド
------------------------
% pear install -a DB
------------------------

インストールできたかは list でパッケージの一覧を取得すればいい
------------------------
% pear -c /home/acount_name/pear.conf list
------------------------
※pear.conf info のところが .pearrc になっている場合があるかも?find /home/acount_name -name '*pear*' で対象のファイルがあるか確認するといい。
※ -c file の詳細は pear help options で確認できる

これだとさくらサーバーに最初からある pear の情報が出る
------------------------
% pear list
------------------------

すると、エラーが出てインストールできなかった

//エラー内容
------------------------
Cannot install, php_dir for channel "pear.php.net" is not writeable by the current user
------------------------

書き込みができないという内容。どうもインストールを実施しようとしている pear が、さくらサーバーにもともとインストールされている pear らしい。

//pear のバージョンを調べるとどの pear に対して命令しているのか分かる
------------------------
% pear info PEAR
------------------------

自前のpearならこれ
------------------------
% pear -c /home/acount_name/pear.conf info PEAR
------------------------

自分でインストールした pear に対して命令してもいいが、index.php からライブラリをインストールする方法に変更。

pear インストール時に生成された index.php にブラウザからアクセス。
画面の右上にある「Search package by name」から、DB と Pager を検索してインストール。
DB と名前の入るライブラリがたくさんあって、検索結果が出るまで時間がかかった。読み込み中がずっと続いたのであせった。

インストールできたら、ドキュメントルートの php.ini を変更してpear を include して使う。

さくらにて、異なるドメイン間でリダイレクトする

さくらインターネットにて .htaccess 内に RewriteRule を記述してリダイレクトを指定したがうまくいかなかった。どうもドメインをまたいでのURL遷移は禁止されているらしい。

・さくらインターネットで、RewriteRule を用いて異なるドメイン間のリダイレクトは不可。

php を使ってのリダイレクトは問題なく出来た。

---------------------------------
<?php
header( "HTTP/1.1 301 Moved Permanently" );
header( "Location: http://$new_url" );
?>
---------------------------------

html_entity_decodeで文字化けしたときの対処法

さくらにて、同じサーバーで異なるドメインを運用中、片一方のドメインだけで文字化けが発生した。文字化け発生箇所は html_entity_decode を実行した直後。

原因はphpのバージョンの違いだった。
html_entity_decode のエンコードのデフォルト値はphpのバージョンで異なる。

PHP 5.6.0 以降では、デフォルト値として default_charset の値が使われる。PHP 5.4 と PHP 5.5 のデフォルト値は、 UTF-8 で、それより前のバージョンの PHP のデフォルト値は ISO-8859-1 である。

私のさくらサーバーはhtmlファイル内でphpを実行させるため、ルートファイルにphp.cgiをコピーしている。で、さくらのphpのバージョンはコピーしたphp.cgiで決まる。今回片一方のドメインのみで文字化けが起こったのはphp.cgiのバージョンが異なったためだった。

文字化けなしのphp.cgiをコピーして問題は解決した。なお、html_entity_decode では encoding というオプションの引数で文字コードを変えることが可能である。

UTF-8なら、
html_entity_decode($str,ENT_NOQUOTES,'UTF-8')

【さくら共有】mysqlサーバーに突然アクセスできなくなった件

さくら共有サーバーのmysqlサーバーに突然アクセスできなくなったときの覚書。

サイトにアクセスしても突然つながらなくなった。

「Servece Temporarily Unavailable」と出る
mysql_error1

ページを更新させると違うエラーが出る
mysql_error2

どうもmysqlサーバーにつながってないよう。

phpmyadminへのログインを試みる。
mysql_error3

ログインできない。エラー番号は1040。

SSHからmysqlサーバーにログインしてみる。
mysql_error4

「Too many connections」のエラー。ようはmysqlサーバーへのアクセスが多すぎらしい。

これを解消するためにいろいろ試みた。
mysql_error5

動作しているプロセスを終了してみるが、改善されず。

結局2時間後、つながるようになった。時間が解決してくれた。

さくら共有サーバーで使えるmysqlコマンドの一覧

さくら共有サーバーで使えるmysqlコマンドの一覧は次のとおり。
mysqlモニターにログインしなくても(ログイン前に)つかえるもの。

MySQL5系 MySQL4系
mysql mysql-4.0
mysqldump mysqldump-4.0
mysqlimport mysqlimport-4.0
mysqlshow mysqlshow-4.0
mysql_config mysql_config-4.0

上記だけなので、mysqladminなどは使えない。

実行するとこうなる
------------------------------
mysqladmin: Command not found.
------------------------------

ソース

【mysql】さくら共有サーバーのmy.cnfの場所

my.cnfは、mysqlの設定ファイル。

SSHでサーバーにログイン(mysqlモニターにはログインしない)して、以下のコマンドを実行すれば確認できる。

「mysql --help」

もしくは、

「mysql --help | grep my.cnf」

helpに書かれている次のパスが、my.cnfのあるところ。
mycnf1

実際には「/usr/local/mysql/5.5/etc」にあった。

以下の記述があった。

-------------------------------
[mysql]
default-character-set=ujis
[mysqldump]
default-character-set=ujis
[mysqlimport]
default-character-set=ujis
[mysqlshow]
default-character-set=ujis
-------------------------------

これは、サーバーにログイン後(mysqlモニターにはログインしない)に使えるコマンド。
mysqladminなどはないので、実行しても使えない。

-------------------------------------------
mysqladmin -u username -h hostname -p
-------------------------------------------

↓ ↓ ↓

-------------------------------------------
mysqladmin: Command not found.
-------------------------------------------

さくら、poderosaで日本語入力

ターミナル(poderosa)でさくらのmysqlサーバーにログイン後、日本語できなかったので、対処法のおぼえ書き。

実行したいmysqlクエリ
-----------------------------------------------
UPDATE table1 SET flag = 1 where column LIKE '%日本語%'
-----------------------------------------------

poderosaのエンコーディング設定
-----------------------------------------------
utf-8(cjk)
-----------------------------------------------

クエリをpoderosaにコピペすると日本語だけきれいに無くなる。

つまりこうなる。
-----------------------------------------------
UPDATE table1 SET flag = 1 where column LIKE '%%'
-----------------------------------------------

対処法を調べてみると、「.cshrc」に次の追記をすればいいらしいと判明。

#poderosaで日本語を扱うために追記
-----------------------------------------------
setenv LANG ja_JP.UTF-8
-----------------------------------------------
参考サイトはこちら

poderosaでmysqlサーバーに再ログイン。
すると新たなるエラー。

エラー内容
-----------------------------------------------
ERROR 1267 (HY000): Illegal mix of collations (utf8_general_ci,IMPLICIT) and (ujis_japanese_ci,COERCIBLE) for operation 'like'
-----------------------------------------------
※「ujis」は、日本語EUC(EUC-JP)のこと。

文字コードが違うようなので、poderosaのエンコーディングを変更
-----------------------------------------------
utf-8(cjk) → euc-jp
-----------------------------------------------

無事にエラーも出ずに日本語も使えるようになった。

2014年版 さくらでpearインストール(go-pear.phar使用)

さくらインターネットでpearをインストールしたときの覚書。
go-pearを使ったが、ファイルが古いのか利用中のさくらサーバーではインストールできず。(途中で止まる)。

2014年4月現在、下記の方法でpearがインストールできる。

1.ターミナルでサーバーにインストールして、go-pear.pharをダウンロード。

------------------------------------
curl http://pear.php.net/go-pear.phar > go-pear.phar
------------------------------------

このとき、ダウンロード先はここにした。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/home/ユーザー名
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

2.次のコマンドを実行してインストール開始。
------------------------------------
php go-pear.phar
------------------------------------

インストール先を「/home/ユーザー名/pear」にしたかったので、事前に「pear」フォルダを作っておいた。「/home/ユーザー名」にある「go-pear.phar」を実行すれば、希望のフォルダにインストールされた。

インストール途中でメッセージが出た。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Would you like to alter php.ini ? [Y/n] :
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
権限がなくて変更できないので「n」を選択。

以上でインストールは完了。

参考ページ: こちら

以下はおまけの覚書。

3.DB.phpが使いたかったので、コマンドを実行してインストール。

------------------------------------
pear install DB
------------------------------------

4.使いやすくするためにDB.phpのある場所にパスを通す。

php.iniに追記した内容
------------------------------------
/home/ユーザー名/pear/share/pear
------------------------------------

また、PHPファイルでデータベースを読み込んだときエラーが出たが、単にログインパスワードを間違えていただけだった・・・

ブラウザに出力されたエラー内容
------------------------------------
Warning: mysql_set_charset(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /home/ユーザー名/libs/function.php on line 220

Warning: mysql_set_charset(): A link to the server could not be established in /home/ユーザー名/libs/function.php on line 220
ConnectError!DB Error: connect failed
------------------------------------

さくら共有サーバーでImportError: No module named MySQLdbが出る

さくら共有サーバーに「MySQL for Python」をインストールしたときに、ImportErrorが出た。解決方法の覚書。

【環境と前提】
---------------------------------
・さくらスタンダードプラン
・/home/workroom/local以下に自前の python2.7 がインストール済み。(さくら標準のpythonとは別で)
・/home/workroom/local以下に MySQL for Python がインストール済み。
---------------------------------

import MySQLdb を行うとエラーが出るのだが、理解に苦しんだのはエラー発生の条件が限定されているということ。

エラー内容
---------------------------
Traceback (most recent call last):
File "python_test4.cgi", line 11, in
import MySQLdb
ImportError: No module named MySQLdb
---------------------------

エラーが出る、もしくは出ないのは次の場合。

エラーが出ない(問題なし)
---------------------------
1.自前のpythonにパスを通して、ターミナルで「import MySQLdb」したとき。

2.テキストファイルの先頭に「#!/usr/local/bin/python」と記述して、pythonスクリプトをアップロードして、さくら標準のpythonを使い、ブラウザで読み込んだとき。
---------------------------
この2つの場合は、問題なく動作する。

エラーが出る
---------------------------
1.テキストファイルの先頭に「#!/home/username/local/bin/python」と記述して、pythonスクリプトをアップロードして、自前のpythonを使い、ブラウザで読み込んだとき。
---------------------------
自前のpythonを使って、ブラウザでpythonスクリプトを読み込んだときだけエラーが発生する。

「.cshrc」に PYTHONPATH や LD_LIBRARY_PATH を設定しているのに、無い!といわれる。

いろいろ悩んだ結果、解決法。
pythonスクリプトの先頭の記述を変更した。

---------------------------
#!/home/username/local/bin/python
---------------------------

↓↓↓

---------------------------
#! /usr/bin/env -S LD_LIBRARY_PATH=/home/username/local/lib PYTHONPATH=/home/username/local/lib/python:/home/username/local/lib/python/site-packages:/home/username/local/MySQL-python-1.2.3:/home/username/local/lib /home/username/local/bin/python
---------------------------

ようは、「.cshrc」に記述してあったpython関係のパスの記述を、全部テキストファイルの先頭にもコピーした。

これで動いた。自前のpythonをテキストファイルの記述で動かすと、「.cshrc」に書いてあるパスは無視されるって事かな?

参考:こちら

テキストファイルのpythonスクリプトでcabochaがエラーになる

テキストファイルのpythonスクリプトでcabochaがエラーになったときの対処法。

ターミナルではpythonでcabochaが動かせるが、テキストファイルに記述したpythonスクリプトからcabochaを実行するとエラーになった。

【環境と前提】
・さくらスタンダードプラン
・/home/username/localに自前のpython2.7がインストール済み
・/home/username/localにcabochaがインストール済み
・テキストファイルのpythonスクリプトでのみ問題発生。

エラー内容(Apacheのエラーログ)
------------------------------------------------------
Traceback (most recent call last):
File "python_test2.cgi", line 5, in
import CaboCha
File "/home/username/local/lib/python2.7/site-packages/CaboCha.py", line 26, in
CaboCha = swig_import_helper()
File "/home/username/local/lib/python2.7/site-packages/CaboCha.py", line 22, in swig_import_helper
mod = imp.load_module('_CaboCha', fp, pathname, description)
ImportError: Shared object "libcabocha.so.4" not found, required by "_CaboCha.so"
------------------------------------------------------
テキストのpythonスクリプトだと、共有オブジェクトが見つからないよう。パスが通ってないということだろう。

解決方法

スクリプトの先頭の記述を次のように変更した。

------------------------------------------------------
#!/home/username/local/bin/python
------------------------------------------------------

↓↓↓

------------------------------------------------------
#! /usr/bin/env -S LD_LIBRARY_PATH=/home/workroom/local/lib /home/workroom/local/bin/python
------------------------------------------------------

参考:こちらのページの最後ら辺

2 / 41234