PHPからexec()でスクリプトを実行したときに途中で落ちる場合

PHPからexec()でスクリプトを実行したときに途中で落ちる場合

バックエンドでPHPからスクリプトを実行した場合に
途中で処理が止まってしまう場合がある。

ローカル環境だとエラーログとかにエラーが出てくれる
場合があるけどCPIとかのレンサバに載せたときに何も
エラーを吐いてくれなくてはまったのでメモ。

初心者みたいだ・・・。

とりあえず以下の値を確認する。

phpinfoで「max_execution_time」

スクリプトがパーサにより強制終了されるまでに許容される最大の 時間を秒単位で指定します。この命令は、いい加減に書かれた スクリプトがサーバーの負荷を上げることを防止するのに役立ちます。 デフォルトでは、30 に設定されています。 PHP を コマンドライン から実行する場合のデフォルト設定は 0 です。
最大実行時間は、システムコール、ストリーム操作等の 影響を受けません。より詳細な情報については、 set_time_limit() 関数の説明を参照ください。
セーフモードで実行している場合にはこの設定を ini_set() で変更することはできません。次善策としては セーフモード をオフにするか あるいは php.ini 上で制限時間を変えるしかありません。
Web サーバー側でもタイムアウトの設定項目を持ち、 その設定で PHP の実行が中断されることもあります。 Apache には Timeout ディレクティブ、IIS には CGI タイムアウト関数があり、どちらもデフォルトで 300 秒に設定されています。 これらの意味については、Web サーバーのドキュメントを参照ください。

30秒で足りない場合はset_time_limit()関数とかで設定変える。

そのほかにローカルで動いていて、レンサバで動かない場合は「memory_limit」の
可能性もあるのでそっちも調べる。

Macのターミナル(Terminal.app)関連のメモ

Macのターミナル(Terminal.app)関連のメモ。主にタブ操作。

■タブを開く方法

Command + T

■タブを移動する方法

Shift + Command + 左右矢印(または{})

■タブを閉じる方法

Command + W

■タブの名前を変更する方法

Command + Shift + I

■新規リモート接続設定を開く

Shift + Command + K

vimの設定メモ:ファイルのディレクトリを自動的にカレントディレクトリにする。

vimの設定メモ。

ファイルのディレクトリを自動的にカレントディレクトリにする。

:e ./ とかする時面倒なので設定。

"----------------------------------------------------
" カレントディレクトリの設定
"----------------------------------------------------
" ファイルのディレクトリを自動的にカレントディレクトリに変更します
au BufEnter * execute ":lcd " . expand("%:p:h")

上記を.vimrcに追記する

diff コマンドで改行コードを無視する

diff コマンドで改行コードを無視する

ちょっとしか変更して無いはずなのにdiffでファイル全体が違うってなってよく凹むのでメモ。

$ diff --strip-trailing-cr sample.php ../test/sample.php

ディレクトリ単位でも大丈夫。

以下のページに詳しくオプション書いてある。

diff – コマンド (プログラム) の説明 – Linux コマンド集 一覧表

君に成功を贈るを再読

中古本屋で社会人になった時に会社からプレゼントされた本に再会。
2年目に後輩に譲ってからしばらく忘れていた。
当時も読んで色々思うところがあったけど30歳になって
改めて読むとこの本の凄さがよりわかった。

引き寄せの法則とか色々と出版されているけどそういった
内容はすでに本書の中によりわかりやすく書かれていて感動した。

もともと読書の習慣がなかった自分が本を読むようになったのも
この本がきっかけだったような気がする。

多分自分一人では手に取ることが無い本だったと
思うのでプレゼントして頂いたことを改めて感謝。

いまだに「腹を練る」が出来ていないので鍛錬していきたいw

中村天風

RHEL6でnamazuをインストールしてPHPから使う

RHEL6でnamazuをインストールしてPHPから使う

RHEL4のサーバからデータ移行するときにはまったメモ。

■環境

# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.3 (Santiago)

 

# php -v
PHP 5.3.3 (cli) (built: Jul  3 2012 16:53:21)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with the ionCube PHP Loader v4.0.14, Copyright (c) 2002-2011, by ionCube Ltd.

■kakashiインストール

$ wget http://kakasi.namazu.org/stable/kakasi-2.3.4.tar.gz
$ tar xzvfp kakasi-2.3.4.tar.gz
$ cd kakasi-2.3.4
$ ./configure
$ make
$ su
# make install

■namazuインストール

$ wget http://www.namazu.org/stable/namazu-2.0.21.tar.gz
$ tar xzvfp namazu-2.0.21.tar.gz
$ cd namazu-2.0.21
$ su
# cd File-MMagic/
# yum -y install perl-ExtUtils-MakeMaker
# perl Makefile.PL && make install
# cd ../
# ./configure
# make
# make install

■namazu.so作成
php-namazuが無いのでそこを対応する

http://sourceforge.jp/projects/php-i18n/
上記サイトよりnamazu-2.3.1.tgzをwget

# wget http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Fphp-i18n%2F14174%2Fnamazu-2.3.1.tgz

http://tzono.com/wiki/index.php?linux%2Fnamazu
上記サイトのように作業しようとするもphpizeコマンドが無い事が発覚。
php-develに同梱されているようなのでインストールする

php-develが入ったところから。。。

# cd namazu-2.3.1
# phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
# ./configure --with-namazu
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
・・・
# make
# make install
Installing shared extensions:     /usr/lib64/php/modules/

■php.iniを変更する
末尾に以下を追加しapacheをリスタートする

extension="namazu.so"
namazu.debugmode = Off
namazu.lang = ja_JP.SJIS

apacheリスタート後にはphpinfo.phpに「namazu」セクションが追加されている

あとはインデックスの再構築したり。。

■参照URL
サイト内検索システム構築(Namazu)

linux/namazu おどうぐ箱

PHP5 の Namazu モジュールを作成するための Patch

PHPのNamazuモジュールの組み込み

HTML5のwindow.postMessage()でクロスドメインでのiframe内から 親のwindowにメッセージを送る方法

HTML5のwindow.postMessage()でクロスドメインでのiframe内から
親のwindowにメッセージを送る方法。

クロスドメインのページをiframeで読み込んだときに
iframe内のページ(長いページ)が遷移したら親ページもページの
上部に移動するようにしたくて調査した。

■参考サイト
window.postMessage

window.postMessage() を使って、クロスドメインの iframe の高さを設定する検証

window.postMessage()の学習

上記のサイトを参考にして以下のようなコードを作成

■親ページ側に追加したjsのサンプル

$('#next_click').live('click', function(){
     var target = parent.postMessage ? parent : (parent.document.postMessage ? parent.document : undefined);
     if (typeof target != "undefined"){
         target.postMessage("page change", "*");
     }
});

上記でid:next_clickがクリックされたら親に「page chage」というメッセージが送られる。
※jQuery使用

■子ページ側に追加したjsのサンプル

$(function(){
        $(window).on("message", function(e){
        if (e.originalEvent.origin == 'http://許可するドメイン') {
            var data=e.originalEvent.data;
            if(data==='page change'){
                $('html,body').animate({scrollTop:0}, 400);
            }
        }
    });
})

上記で子でメッセージを受けとった際にページを上部まで移動させられる。
※jQuery使用
最初にあげた参考サイトではaddEventListenerを使っていたけど↑はjQueryで
イベントをセットしている。
jQueryを使う場合は「e.origin」や「e.data」でデータが取得できないので
「e.originalEvent.origin」や「e.originalEvent.data」でデータを取得する。
※eをconsole.dirすればわかる。

PDOでPDO::__construct(): [2002] No such file or directory … エラー

mac book air で homebrew を使ってmysqlをインストールしたけど
PDOで接続する時に以下のエラーに遭遇した。

PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in …

どうもPHPが利用するUNIXソケットが見つからないということらしい。

自分の環境のUNIXソケットの位置がわからない。。。。

しばらく悩むもmysql.sockの位置の調べ方は結局以下のコマンドを叩くだけでよかった。。

$ mysqladmin version

自分の環境では「/tmp/mysql.sock」だった。
位置がわかったので、今回はとりあえずphp.iniの
pdo_mysql.default_socketを修正したら動いた。

pdo_mysql.default_socket=/tmp/mysql.sock

■参考URL
[symfony2][mac]データベース関連のコンソールでエラー

Warning Error: PDO::__construct(): [2002] No such file or directory・・・