ページ内コンテンツ
PHP: Hypertext Preprocessor
Links
- http://www.php.net/
- http://jp2.php.net/ (日本のミラーサイト)
- 日本PHPユーザー会 (Japan PHP User Group)
- 非推奨関数とか,本当勘弁してもらいたい.C言語を見習え!
Install
- --enable-intl を指定する場合は libicu-devel (ユニコード用の国際化コンポーネント) が必要
- --enable-opcache OPCache 使用 (5.5.x~)
- MariaDBのライブラリに libmysqlclient を使用すると MYSQL_UNIX_ADDR未解決のコンパイルエラが発生する (5.6.36)
- DBのライブラリに mysqlnd を使用する
- OpenSSL-1.1.x を使用している場合
- OpenSSL-1.1.x を使用している場合は, /usr/local/lib にライブラリが必要.シンボリックリンクを張っておく.
- OpenSSL-1.1.x を使用している場合は以下の様にしてから,configure を実行.
cd /usr/local/ssl ln -s /usr/local/include . ln -s /usr/local/lib64 lib cd (php-source)
- PHP-5.6 + OpenSSL-1.1 の場合は パッチを当てる.php56.36-openssl11.patch
configure
# zcat php-5.x.y.tar.gz |tar xfv - # cd php-5.x.y #./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \ --with-apxs2=/usr/local/apache/bin/apxs \ --with-openssl=/usr/local/ssl --with-zlib=/usr \ --enable-mbstring --with-iconv --enable-intl \ --enable-zip --enable-soap --enable-pcntl \ --enable-sockets --with-curl --with-xmlrpc --enable-opcache \ --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir=/usr # make # make test # make install
configure オプションの修正
- PHP7 + OpenSSL1.1 の場合は --with-openssl=/usr/local
- /usr/local/lib に openssl のライブラリが必要
- DBのライブラリに libmysqlclient を使用する場合は以下のオプションを指定
--with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql
Short Open Tag
- <? ... ?>, <?=... > 等の Short Open Tag を有効にするには,設定ファイルで以下のように設定する.
short_open_tag = On
MySQL
- 処理中の文字コードを UTF-8にする場合
または
mb_internal_encoding("utf-8"); mysql_set_charset('utf8');
mb_internal_encoding("utf-8"); mysql_query("SET NAMES utf8", $db);
- mb_internal_encoding("utf-8") は php.ini でも指定可能.
- SET NAMES utf8 でクエリの文字コードを指定可能.
エラーログ
- /etc/php.ini の error_log, log_errors で設定
- パーミッションに注意
log_errors = On error_log = /var/log/php/php.log
- ただし php-fpm が動いている場合は,Web上でのエラーは error_log に出ない.
- /var/log/php-fpm/www-error.log
- どこで指定してるんだ! ぷんぷん!
- /etc/php-fpm.d/www.conf
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php.ini の設定が反映されない
- php -i |grep php.ini で PHPが実際に読み込んでいる php.ini を調べる
- PHPが WWWサーバのモジュールとしてではなく,php-fpm で動いている場合は,php-fpm を再起動する必要がある.
systemctl restart php-fpm
CetOS8 / Rocky Linux8 で PHPを 7.2から 7.4 にする
dnf module list php dnf module reset php dnf module enable php:7.4 -y yum erase php yum install php --allowerasing
opcache.so: undefined symbol: sapi_globals, opcache.so: undefined symbol: core_globals_id
- yum でPHPを入れたまま,PHPの最新版をコンパイルして入れたら,ログに出力されるようになった.
- yum で 古いPHPを削除したところ発生しなくなった.
yum remove 'php-*'
doesn't appear to be a valid Zend extension
- 5.6.3 で自作の拡張関数(.so)を読ませようとしたところ,発生.関数も読み込まれない
- php.ini に zend_extension ではなく extension でモジュールを記述したところOK
- モジュールは /usr/local/lib/php/extensions/php_tuis_auth.so
- /usr/local/lib/php.ini
extension=php_tuis_auth.so
AH00052: child pid # exit signal Segmentation fault (11)
- PHP 5.5.12 で発生.
- PHP 5.6.3 にアップデータしたところ,エラーが出なくなる
- Apache のworkerの問題かも
Notice: Undefined index:
- apacheと連携させて、次の様なエラーが出る時(一例)
Notice: Undefined index:
php.iniのをerror_reporting = E_ALL
に変更。error_reporting = E_ALL & ~E_NOTICE
基本的には、エラー文の接頭語にあたる"※※※:"の※部分を"~E_※※※"として、今までのerror_reportingに対して&で繋いでいく。
- apacheと連携(ry(二例)
"Deprecated: Assigning the ~"
をerror_reporting = E_ALL
に変更。error_reporting = E_ALL & ~E_DEPRECATED
- apacheと(ry(三例)
Notice:とDeprecated:の両方だと
になる。問題先延ばしだが、開発者以外なら問題なかろうerror_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
Counter: 5475,
today: 2,
yesterday: 0
最終更新: 2023-08-17 (木) 13:00:56 (JST) (395d) by iseki