さくらインターネット


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
------------------------------------------------------

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

【さくら共有サーバー】pythonでmysqlを使えるようにする

pythonでmysqlを使えるようにした際の覚書。

概要をつかむための参考ページ

【環境と前提】
・さくらスタンダードプラン
・「/home/username/local」に自前のpython2.7がインストール済み

1.pythonでmysqlを利用するためドライバをインストール

ドライバは何種類かある中で「MySQL for Python」を選択。デファクトスタンダードらしい。

こちらからダウンロード(この時のファイル名、MySQL-python-1.2.3.tar.gz)

ダウンロード先は「/home/username/local」で、次に解凍。
解凍したフォルダに移動してセットアップを実行。

参考:こちら

セットアップコマンド
--------------------------------------------------
% python setup.py install --home=~/local

Traceback (most recent call last):
File "setup.py", line 5, in
from setuptools import setup, Extension
ImportError: No module named setuptools
--------------------------------------------------

エラーで出る。

setuptoolsがないとのことで、インストールする。

参考:Pythonで一番最初に入れるべきパッケージ
  こちらも参考

setuptoolsは、こちらからダウンロード

ダウンロード後、解凍し、フォルダの中へ移動。

コマンドを実行。
--------------------------------------------------
python ez_setup.py
--------------------------------------------------

インストールできたことを確認するため、コマンドを打って確認
--------------------------------------------------
easy_install
--------------------------------------------------
エラーは出るけど、コマンド自体が存在していることを確認。

setuptoolsがインストールできたので、「MySQL-python」に移動してsetupをリトライ。

コマンド
--------------------------------------------------
python setup.py install --home=~/local
--------------------------------------------------

今度は別のエラーが出る。

エラー内容
--------------------------------------------------
% python setup.py install --home=~/local

running install
Checking .pth file support in /home/username/local/lib/python/
/home/username/local/bin/python -E -c pass
TEST FAILED: /home/username/local/lib/python/ does NOT support .pth files
error: bad install directory or PYTHONPATH

You are attempting to install a package to a directory that is not
on PYTHONPATH and which Python does not read ".pth" files from. The
installation directory you specified (via --install-dir, --prefix, or
the distutils default setting) was:

/home/username/local/lib/python/

and your PYTHONPATH environment variable currently contains:

''

Here are some of your options for correcting the problem:

* You can choose a different installation directory, i.e., one that is
on PYTHONPATH or supports .pth files

* You can add the installation directory to the PYTHONPATH environment
variable. (It must then also be on PYTHONPATH whenever you run
Python and want to use the package(s) you are installing.)

* You can set up the installation directory to support ".pth" files by
using one of the approaches described here:

https://pythonhosted.org/setuptools/easy_install.html#custom-installation-locations

Please make the appropriate changes for your system and try again.
--------------------------------------------------

どうもPYTHONPATHがエラーの原因のようなので、PYTHONPATHの設定を変更する。

ホームディレクトリにある「.cshrc」に以下を追加。
参考:こちら

--------------------------------------------------
setenv PYTHONPATH $HOME/local/lib/python:$HOME/local/lib/python/site-packages

setenv LD_LIBRARY_PATH $HOME/local/lib
--------------------------------------------------
※実際には「$HOME/local/lib/python」というフォルダは存在しない。あるのは「$HOME/local/lib/python2.7」。だけど構わない。

パスの確認は、コンソール画面で
-----------
python
>>>import sys
>>>sys.path
-----------

サーバーに再接続して、ふたたびsetupを試みる。

コマンド
--------------------------------------------------
python setup.py install --home=~/local
--------------------------------------------------

うまくいった。

おまけ。
別に機会に「MySQL for Python」をインストールしたときは、こんなエラーが出た。

エラー内容
--------------------------------------------------
% python setup.py install --home=~/local
running install
error: can't create or remove files in install directory

The following error occurred while trying to add or remove files in the
installation directory:

[Errno 2] No such file or directory: '/home/workroom/local/lib/python/test-easy-install-35897.write-test'

The installation directory you specified (via --install-dir, --prefix, or
the distutils default setting) was:

/home/workroom/local/lib/python/

This directory does not currently exist. Please create it and try again, or
choose a different installation directory (using the -d or --install-dir
option).
--------------------------------------------------
「python」という名前のディレクトリを作ってあげたら解決した。

【さくら共用サーバー】pythonでprint出力する

さくら共用サーバーで、pythonを使って、ブラウザに文字を出力する方法。

さくらインターネットスタンダードプランにはあらかじめpythonがインストールされているので、それを利用する。

以下の文字をテキストエディタにコピペして保存。
保存時の拡張子は「.cgi」にする。(「.py」でない。)
-------------------------
#!/usr/local/bin/python
# -*- coding: utf-8 -*-

print "Content-type: text/html\n"
print "hello world "
-------------------------

そして、「www」フォルダ以下に入れる。

-----気をつけるが何点かある-----

1.「/usr/local/bin/python」は自身のサーバー環境を確認。
2.改行コードは「LF」にする。
3.アップロードしたファイル及び、ディレクトリのパーミッションは「755」か「705」にする。
4.「Content-type: text/html」は必須。無いと Internal Server Error になる。詳細はこちら
--------------------------------

3 / 41234