PHP


【さくらVPS】PHPセッションファイルの保存場所

さくらVPS に PHP をインストールしたときにPHPセッションファイルの保存先と保存先の指定方法について調べたときの覚書

セッションファイルの保存場所は、 php.ini の session.save_path ディレクティブで指定できる。しかしデフォルトではコメントアウトになっていた。

その状態で phpinfo() を実行すると、 session.save_path の右カラムは no value になっている。

savepath

ターミナルから phpinfo を見る場合
-------------------------------------------------
cat /etc/php.ini | grep session.save_path
-------------------------------------------------

実際のセッションファイルは左カラムに記載されているパスにある。

セッションファイルのあるパス
-------------------------------------------------
/var/lib/php/session
-------------------------------------------------

で、このパス(/var/lib/php/session)はどこで設定しているのかというと、php.conf ファイルになる。

-------------------------------------------------
cat /etc/httpd/conf.d/php.conf
-------------------------------------------------

php.conf 内の記述
-------------------------------------------------
php_value session.save_path "/var/lib/php/session"
-------------------------------------------------

セッションファイルの保存先を変更したいなら、php.ini の session.save_path のコメントアウトを外して有効にすればいい。

変更前
-------------------------------------------------
;session.save_path = "/tmp"
-------------------------------------------------

変更後
-------------------------------------------------
session.save_path = "希望の保存先パス"
-------------------------------------------------

さくらVPSにphp-mecabを入れたときの覚書

さくらVPSにphp-mecabを入れたときの覚書手順
1.mecab を入れる
2.php-mecab を入れる

参考にしたサイト
phpでmecab

手順は参考サイトどおり。自分なりの捕捉を入れた。

ソースコードをインストールする場所に移動
-------------------------------------------------
cd /usr/local/src/
-------------------------------------------------

ダウンロードと解凍
-------------------------------------------------
wget http://mecab.googlecode.com/files/mecab-0.996.tar.gz
tar xvf mecab-0.996.tar.gz
-------------------------------------------------

解凍したディレクトリに移動
-------------------------------------------------
cd mecab-0.996
-------------------------------------------------

configure で Makefile をつくる
-------------------------------------------------
sudo ./configure --enable-utf8-only
-------------------------------------------------
※「configure」というシェルスクリプトを実行することで、ソースファイルをコンパイルする前に、インストール対象となるシステム特有の機能/情報をチェックし、チェック状況を記述したMakefileが作成される。

コンパイルとインストール
-------------------------------------------------
sudo make
sudo make install
-------------------------------------------------

この時点で mecab を実行すると 辞書がないエラーが出る
-------------------------------------------------
# mecab
param.cpp(69) [ifs] no such file or directory: /usr/local/lib/mecab/dic/ipadic/dicrc
-------------------------------------------------

バージョン確認だけならエラーは出ない
-------------------------------------------------
# mecab -v
mecab of 0.996
-------------------------------------------------

辞書「mecab-ipadic-neologd」のインストール

-------------------------------------------------
cd /usr/local/src/mecab-0.996/
mkdir library
cd /usr/local/src/mecab-0.996/library
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd /usr/local/src/mecab-0.996/library/mecab-ipadic-neologd/
./bin/install-mecab-ipadic-neologd -n
-------------------------------------------------

動作確認が終了したら続いて、php-mecab のインストール

-------------------------------------------------
cd /usr/local/src/
wget https://github.com/rsky/php-mecab/archive/master.zip
unzip master.zip
cd php-mecab-master/mecab
phpize
sudo ./configure
sudo ./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/local/bin/mecab-config
sudo make
sudo make install
-------------------------------------------------

./configure の途中で re2c が無いみたいなエラーが出たのでインストールする

re2c をインストール
-------------------------------------------------
wget http://jaist.dl.sourceforge.net/project/re2c/re2c/0.13.7.5/re2c-0.13.7.5.tar.gz
tar zxvf re2c-0.13.6.tar.gz
cd re2c-0.13.6
./configure
make
make install
-------------------------------------------------

再び./configure からやり直し
-------------------------------------------------
sudo ./configure
sudo ./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/local/bin/mecab-config
sudo make
sudo make install
-------------------------------------------------

シンボリックリンクの作成
-------------------------------------------------
sudo ln -s /usr/lib64/php/modules/mecab.so /etc/php.d
-------------------------------------------------

php.iniの編集
-------------------------------------------------
vim /etc/php.ini
-------------------------------------------------

/etc/php.ini
-------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;

; If you wish to have an extension loaded automatically, use the following
; syntax:
;
; extension=modulename.extension
;
; For example, on Windows:
;
; extension=msql.dll
;
; ... or under UNIX:
;
; extension=msql.so
;
; ... or with a path:
;
; extension=/path/to/extension/msql.so
;
; If you only provide the name of the extension, PHP will look for it in its
; default extension directory.

;;;;
; Note: packaged extension modules are now loaded via the .ini files
; found in the directory /etc/php.d; these are loaded by default.
;;;;

;php-mecab を動かす記述
extension=mecab.so

;mecab-php の辞書のパス
mecab.default_dicdir="/usr/local/lib/mecab/dic/mecab-ipadic-neologd"
-------------------------------------------------

apacheの再起動
-------------------------------------------------
service httpd restart
-------------------------------------------------

動作確認
-------------------------------------------------
php -r 'phpinfo();' | grep 'mecab' -i 
-------------------------------------------------

以下のようになっていれば問題ない。
-------------------------------------------------
mecab
MeCab Support => enabled
MeCab Library => 0.996 => 0.996
mecab.default_dicdir => no value => no value
mecab.default_rcfile => no value => no value
mecab.default_userdic => no value => no value
-------------------------------------------------

test.php
辞書の読み込みをしてないとエラーになる
-------------------------------------------------
<?php

$str = 'この焼肉は焼きにくい';
$mecab = new Mecab();

$nodes = $mecab->parseToNode($str);

foreach ($nodes as $n)
{
echo $n->getSurface() . "
";
echo $n->getFeature() . "
";
}
?>
-------------------------------------------------

使用する辞書を PHP で指定する場合
-------------------------------------------------
$options = array('-d', '/usr/local/lib/mecab/dic/mecab-ipadic-neologd');

$mecab = new MeCab_Tagger($options);
-------------------------------------------------

IE11とchromeのcookieの保存場所

chromeのcookieの保存フォルダを開く

chrome のアドレス欄に入れる
-------------------------------------------------
chrome://settings/cookies
-------------------------------------------------

IE11 の場合開発者ツールから cookie をのぞける

F12 で開発者ツールを起動 → 「ネットワーク」。パスを選択して、右カラムの「クッキー」を選ぶ。

IE11 はフォルダの場所が分からなかった。非表示にされている模様。

さくらでphp ファイルを .html で動かすため.htaccessがやってること

.htaccess の中身
-------------------------------------------------

#スラッシュ(/) で終わるURLにアクセスがあったときのアクセスの順番。
#デフォルトは index.html。
#index.html index.php 共にない場合、.ht を見に行き、Forbidden(403) と表示される。
#最後に .ht を置くことで ディレクトリの構造を見せない。

DirectoryIndex index.html index.php .ht


#このバイナリファイルで php のバージョンが決まる
#myphp-scriptという種類のファイルにアクセスがあったら /php.cgiで処理する

Action myphp-script /php.cgi


#.phpと.htmlで終わるファイルをmyphp-scriptという種類とする

AddHandler myphp-script .php .html
-------------------------------------------------

参考ページ

【PHP】mysqlでselectしたデータの出力時に使う変数名に変数を使う

$get_datas['カラム名'];

↓↓↓

$get_datas[$culumn_name];

変数名をそのまま記述すればOK。可変変数は不要。

XMLHttpRequest cannot load エラーの対処法

jqueryでajaxを利用すると、コンソールにエラーが出た

実行したjquery
-------------------------------------------------
$.post(
//アクセスするURL
'http://sub.exemple.com',
{
'value': value
},
function(data){
//リクエスト成功時の処理
});
-------------------------------------------------

コンソールに出たエラー
-------------------------------------------------
XMLHttpRequest cannot load http://sub.exemple.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://exemple.com' is therefore not allowed access.
-------------------------------------------------

リクエスト成功時に実行される処理も行われない。

header("Access-Control-Allow-Origin
解決方法は、http://sub.exemple.com にAccess-Control-Allow-Origin レスポンスヘッダを追加する。

ワイルドカードですべてのドメインからの接続を許可
-------------------------------------------------
header("Access-Control-Allow-Origin: *");
-------------------------------------------------

特定のドメインからの接続のみを許可する場合
-------------------------------------------------
header("Access-Control-Allow-Origin: http://exemple.com");
-------------------------------------------------

.htaccessに書き込むなら
-------------------------------------------------
Header append Access-Control-Allow-Origin: *
-------------------------------------------------

mysql_query($sql) OR die(mysql_error()) の意味

mysql_query($sql) OR die(mysql_error()) の意味。

or演算子 → 左辺がtrueの場合に右辺の式は無視される
die関数 → 指定されたメッセージを出力して、スクリプトを強制終了させる関数

【さくら】pearのCache_Liteでキャッシュする

PEAR ライブラリの Cache_Lite でキャッシュする方法
サンプルスクリプトも含めてこのページがわかりやすかった

サンプルスクリプトもほぼそのまま
----------------------------------------------------------------
<?php

// クラス読み込み
require_once('Cache/Lite.php');

// IDのセット
//$cache_id = $_SERVER["REQUEST_URI"]; //こんなんでもいい
$cache_id = '123456';
// オプション
$options = array(
//さくらの場合、/tmp/はホームディレクトリより上にあるがキャッシュは保存できる。ただ他ユーザーと共有なのでホームディレクトリ以下に保存するほうがいいと思う
// 'cacheDir' => '/tmp/', //キャッシュ保存先
'cacheDir' => '/home/acount_name/tmp/', //共有サーバーなのでホームディレクトリ以下。フォルダは作って事前に作る必要がある
'caching' => 'true', // キャッシュを有効に
'automaticSerialization' => 'true', // 配列を保存可能に
'lifeTime' => 10, // 10(生存時間:10秒)
'automaticCleaningFactor' => 200, // 自動で古いファイルを削除(1/200の確率で実行)
'hashedDirectoryLevel' => 1, // ディレクトリ階層の深さ(高速になる)
);

// オブジェクトのnew
$cache = new Cache_Lite($options);

// キャッシュデータがあるかどうかの判別
if ( $cache_data = $cache->get($cache_id) )
{
echo "【キャッシュ使用】
";
$buff = $cache_data;
}
else
{
// キャッシュデータがない。APIからデータを読み込む処理
// データ取得処理ここから
// ……………………… $read_data にデータを入れておく
$read_data = date('Y/m/d H:i:s');
// データ取得処理ここまで

echo "【キャッシュ未使用】
";
$buff = $read_data;
//$cache->save($buff); ← $cache_id は省略できる?(明示したほうが安心)
$cache->save($buff,$cache_id); //キャッシュを保存
}
print_r($buff);
?>
----------------------------------------------------------------

JQUERYのPOST(ajax)で戻り値を複数返す

JQUERYのPOST(ajax)で戻り値を複数返すには、PHPからjavascriptへのデータの受け渡しの際に配列をJSON形式に変換する

//PHP側
-------------------------------------
$data_arr = array($data1, $data2);

//javascriptに受け渡すため配列をJSON形式に変換
$datas = json_encode($data_arr);
echo $datas; //JQUERYに渡す
-------------------------------------

JQUERY側
-------------------------------------
data_arr = JSON.parse(data); //戻り値をJSONとして解析
alert(data_arr[0]);
alert(data_arr[1]);
-------------------------------------

【PHP】外部サーバーディレクトリ内にあるファイルの一覧を取得する

PHP の readdir 関数はローカルネットワーク内のフォルダにしかアクセスできない。

外部サーバーにあるディレクトリ内ファイルの一覧を取得するには、fopen 関数を使用するといい。

------------------------------------------------
//urlをひらく。ブラウザでフォルダにアクセスした際、
//フォルダ一覧が見られるApacheの機能を利用。
$fp = @fopen(フォルダのパス, 'r');

while ( !feof($fp) ) {

$row = fgets($fp, 1024);

//ファイル名抽出処理。

}
fclose($fp);
------------------------------------------------

ただし、↑だとブラウザからのフォルダ一覧の表示も許可しなければいけないので、セキュリティ的にはよくない。

fopen は、FTP をサポートしているので ftpサーバーに対してなら ftp_nlist() で取得することも可能か?後日検証。

検索されるファイルが置かれているサーバーにファイルを一覧出力するプログラム(phpファイル)を置いて、その結果を受け取りサーバーで取得する方法もある。その場合、ファイル一覧を取得したいフォルダが複数あって実行のつどフォルダを指定したい場合、フォルダの数だけプログラムが必要か?

参考ページ

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1113905041

1 / 512345