ホーム » PHP
「PHP」カテゴリーアーカイブ
CentOSにソースからインストールしたPHPをアンインストール
CENTOSのバージョン:CentOS release 6.6
PHPバージョン:5.3.14
インストール時にconfigure、make、make installを実行したPHPのソースフォルダ(※)より情報を収集
※例/var/download/php-5.3.14
config.statusにはconfigureのコマンドが記載されている
[code]
# ./configure -disable-debug -with-apxs2=/usr/local/apache2/bin/apxs -with-iconv -enable-mbstring -enable-zend-multibyte -with-mysql -enable-soap –with-zlib-dir –with-pdo-mysql –with-mysqli –enable-zip –with-gd –with-jpeg-dir=usr/local/lib –with-libdir=lib64 –with-curl –enable-ftp
[/code]
インストール先のフォルダは引数prefixで指定するが、configureでは指定していないのでデフォルトの/usr/localにインストールされた
以下のファイル、フォルダを削除すればPHPは削除される
/usr/local/bin/php
/usr/local/bin/php-config
/usr/local/bin/phpize
/usr/local/lib/php
/usr/local/lib/php.ini
/usr/local/lib/php
log4php
PEAR等を使わずに単純に使う方法
log4phpのダウンロードページよりzip形式のSource packageをダウンロード。
phpフォルダの下にlibsフォルダを作成してダウンロードしたlog4phpを展開
Logger.phpがあるフォルダにPATHを通すためにphp.iniのinclude_pathを設定
[code]
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"
include_path = ".;c:\php\includes;D:\php\libs\apache-log4php-2.3.0\src\main\php"
[/code]
PATHが通ったフォルダ(今回はD:\php\libs\apache-log4php-2.3.0\src\main\php)に設定ファイル(log4php.xml)を作成して配置
[code]
<configuration xmlns="http://logging.apache.org/log4php/">
<appender name="default" class="LoggerAppenderFile">
<param name="file" value="default.log" />
</appender>
<appender name="myAppender" class="LoggerAppenderFile">
<param name="file" value="d:/log/log4php/myLog.log" />
</appender>
<root>
<level value="warn" />
<appender_ref ref="default" />
</root>
<logger name="myLogger">
<level value="debug" />
<appender_ref ref="myAppender" />
</logger>
</configuration>
[/code]
以下がログの出力
[code]
require_once("Logger.php");
Logger::configure(‘log4php.xml’); // 設定ファイルの読み込み
$logger = Logger::getLogger(‘myLogger’); // myLoggerという名前のloggerを使用
$logger->debug("debug message");
[/code]
PHP(Windows)で独自の拡張DLLを作成
実行環境
Windows2008R2(64bit)
IIS
PHP5.4.31の非スレッドセーフ版(IIS を使う場合は、非スレッドセーフ版の PHPのほうが安定しているらしい)
環境構築の為にダウンロードしたファイルは(php-5.4.31-nts-Win32-VC9-x86.zip)
開発環境
PHP5.4.31のソース等が入手できなかったため5.4.33のそれをダウンロード
「Download source code」よりphp-5.4.33-src.zipをダウンロード
「VC9 x86 Non Thread Safe」-「Zip」よりphp-5.4.33-nts-Win32-VC9-x86.zipをダウンロード
php-5.4.33-nts-Win32-VC9-x86.zipをC:\phpに展開。
(C:\phpにはパスを通す)
php-5.4.33-src.zipをC:\php-srcに展開。
Cygwin
拡張dllのフレームワークの作成等にCygwinのコマンドを使用するのでC:\Cygwinにインストール
Cygwinのサイトよりsetup-x86.exeをダウンロードしてセットアップ実行
必用なモジュールが不明だったのでフルインストールを実行したが、texlive-collection-basic.shのインストールで止まってしまった。
フルインストールをやめてデフォルトインストールをしたが、これでも同様にインストールが完了しなかった。
一応、今回の必用なモジュールはインストールされたようなので、深くは追求しない。
VC
VisualStudio2008はあらかじめインストール済
※別途SDKはインストールしていない
拡張DLLのテンプレートを作成
Visual Studio 2008コマンドプロンプトを開いてカレントをC:\php-src\extに移動して以下のコマンドを実行
※php_test.dllを作成するためのプロジェクトワークスペースが作成される
php ext_skel_win32.php --extname=test
config.w32ファイルの編集
C:\php-src\ext\test\config.w32を以下に従って編集
// $Id$ // vim:ft=javascript ARG_ENABLE("test", "enable test support", "no"); if (PHP_TEST != "no") { EXTENSION("test", "test.c"); }
configure
C:\php-srcをカレントにして以下のコマンドを実行
buildconf configure
正しく実行されればC:\php-src/main/config.w32.hが作成される
C:\php-src\ext\test
プロジェクトの設定とコンパイル
VCでC:\php-src\ext\test\test.dspを開く。
(test.dspはVC6用のプロジェクトファイルなのでVC2008用に変換)
アクティブなプロジェクトをRelease_TSに設定
追加のライブラリプロジェクトにC:\php\devを追加
プリコンパイルプロセッサからZTS=1を削除
(スレッドセーフの時は不要)
参照するライブラリをphp5ts.libからphp5.libに変更
(スレッドセーフの時は不要)
以上の設定完了後、コンパイルを実行するとC:\php-src\ext\php_text.sllが作成される
関数の追加
関数Procを追加(引数には数値と文字)
php_test.h
以下を追加
PHP_FUNCTION(Proc);
test.c
test_functions[]にProcを追加
const zend_function_entry test_functions[] = { PHP_FE(Proc, NULL) PHP_FE_END /* Must be the last line in test_functions[] */ };
引数で受けた数値と文字列より文字列に変換して返す関数の実態
PHP_FUNCTION(Proc) { char *arg = NULL; int arg_len, len; long n; char *strg; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls", &n, &arg, &arg_len) == FAILURE) { return; } len = spprintf(&strg, 0, "number=%d string=%s", n, arg); RETURN_STRINGL(strg, len, 0); }
以上でリコンパイル
DLLの検証
php_test.dllを実行環境のD:\php\extにコピー
php.iniに以下を追加
extension=php_test.dll
関数の呼び出しをコーディング
$s=Proc(100, "tarum"); echo($s);
以上で正しく動作される
参考サイト
単純な PHP エクステンションの開発方法
gettextを使用してPHPを多国語対応(windows版)
gettextは様々な環境、言語に対応した多国語対応のライブラリ。
PHPも拡張機能として標準で提供されている。
※PHPのextディレクトリにあるphp_gettext.dllが実装
※php.iniのphp_gettext.dllのコメントを予め外して置く
※PHPファイルはUTF-8に設定
カタログファイルについて
gettextでは各言語ごとに辞書ファイル(gettextではカタログと呼ぶ)を用意する。
※拡張子はpo
カタログは全て共通のファイル名。(カタログのファイル名はドメインとして後ほど設定)
カタログファイルの作成方法は後述する。
カタログファイルのディレクトリ構成
実行環境(ここではWindowsサーバー、IISを想定)では各カタログのファイルを以下に従って配置する。
例)
c:¥temp¥locale¥言語¥LC_MESSAGES¥カタログファイル
※1.c:¥temp¥localeは任意のパスを設定可能。(ドメインのパスと呼ぶ)
※2.言語は言語コード_国コード。(日本はja_JP、英語は)
PHPでの実装
PHPでは以下を各PHPの最初に挿入する。
多国語対応の文字は以下のように埋め込む
カタログの作成
カタログはpoEditで作成する。
poEditをダウンロードサイトよりダウンロード
poEditはソースファイルを解析してカタログファイルを作成する
poEditを使用してカタログファイルを作成する際には実行環境とは別に以下のディレクトリ構成で作業することを前提に説明。
c:¥workにカタログファイルを保存
c:¥work¥root以下にソースファイル(*.php)を配置
メニューの新規作成を選択
言語にカタログ作成対象の言語を指定(最初は日本語)
カタログの設定メニューで以下を設定
「プロジェクトの名前とバージョン」任意の名称
「文字符号化法」UTF-8
「ソースコードの文字符号化法」UTF-8
それ以外はデフォルト値
ファイルを保存
一旦、ファイルを上述のC:¥workに保存。
ファイル名はdic.poとする。(既に述べた通り、ファイル名=ドメイン名)
カタログの設定メニューで以下を設定
「ソースの検索パスーベースのパス」ピリオド(=C:¥work)を指定。
「ソースの検索パスーパス」各ソースのフォルダの絶対パス(=root)
「ソース中のキーワード」アンダーバーを指定
カタログの更新を実行するとカタログファイル「dic.mo」に反映される。
カタログファイルを以下にコピー
c:¥temp¥locale¥jp_JA¥LC_MESSAGES¥dic.mo
以上
LOG4PHPで出力フォーマットに日付を指定したらエラー
LOG4PHPで出力フォーマットを指定しないとログには日時は出力されない
以下はLOG4PHPに渡す設定ファイル(config.xml)の内容
[code]
<configuration xmlns="http://logging.apache.org/log4php/">
<appender name="myAppender" class="LoggerAppenderFile">
<param name="file" value="c:/phplog/myLog.log" />
</appender>
<root>
<appender_ref ref="myAppender" />
</root>
</configuration>
[/code]
設定ファイルを以下に変更して日時を出力指定する
[code]
<configuration xmlns="http://logging.apache.org/log4php/">
<appender name="myAppender" class="LoggerAppenderFile">
<layout class="LoggerLayoutPattern">
<param name="conversionPattern" value="%d %-5p %m%n" />
</layout>
<param name="file" value="c:/phplog/myLog.log" />
</appender>
<root>
<appender_ref ref="myAppender" />
</root>
</configuration>
[/code]
すると以下のエラーが表示された
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for '9.0/no DST' instead in C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\php\php\log4php\pattern\LoggerPatternConverterDate.php on line 74 Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for '9.0/no DST' instead in C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\php\php\log4php\pattern\LoggerPatternConverterDate.php on line 74 Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for '9.0/no DST' instead in C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\php\php\log4php\pattern\LoggerPatternConverterDate.php on line 74 Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for '9.0/no DST' instead in C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\php\php\log4php\pattern\LoggerPatternConverterDate.php on line 74
メッセージに従ってphp.iniに以下を追加して対応
date.timezone = Asia/Tokyo
TOMCAT上でPHPを動かす
環境
OS | Windows 2008 64bit |
---|---|
TOCAT | 7.0.47 |
PHP | php-5.3.28-Win32-VC9-x86 |
PHPのインストール
PHPのZIPファイル(php-5.3.28-Win32-VC9-x86.zip)をPHPのダウンロードページよりダウンロード
ZIPファイルをC:\php以下に展開
C:\php\php.ini-productionをC:\php\php.iniにコピー
;extension_dir = "ext"
を
extension_dir = "c:\php\ext"
に変更
;cgi.force_redirect = 1
を
cgi.force_redirect = 0
に変更
C:\phpにpathを通す
TOMCATの設定
PHP用のコンテキストPHPを作成
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\php\WEB-INF\web.xmlに以下を記述
[code]
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>PHP</display-name>
<servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>executable</param-name>
<param-value>C:\php\php-cgi.exe</param-value>
</init-param>
<init-param>
<param-name>passShellEnvironment</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>*.php</url-pattern>
</servlet-mapping>
</web-app>
[/code]
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\php\META-INF\content.xmlに以下を記述
[code]
<?xml version="1.0" encoding="utf-8"?>
<Context privileged="true"/>
[/code]
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\php\test.phpに以下を記述
[code]
<?php
phpinfo();
?>
[/code]
http://localhost:8080/php/test.phpをブラウザで表示して動作を確認
参考にしたサイト
TOMCATコンテキストの追加
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps以下に新しいコンテキストとなるディレクトリを作成
ここではディレクトリphpを作成
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\WEB-INF\web.xmlに以下を記述
[code]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>PHP</display-name>
</web-app>
[/code]
TOMCAT5以前ではC:\Program Files\Apache Software Foundation\Tomcat 7.0\conf\Catalina\localhost以下にコンテキストの情報をXMLに記述したが、TOMCAT6以降では必用はないようだ。