Category: PHP

Eclipse PDTでgetter/setterを自動生成

  Javaであれば、Eclipseのコンテキストメニューから「GetterおよびSetterの生成」を実行できるのだが、PDTにはそのような機能はないらしい。 DTO定義する時に不便なので、Eclipseのテンプレート機能で代替する。 Eclipse PDTで、ウィンドウ→設定→PHP→エディター→テンプレートを実行。 「新規」をクリック。 「名前」、「説明」、「パターン」をそれぞれ入力してOK。 「パターン」は、例えば以下のように入力する。 public function get${PropertyName}() { return $$this->${PropertyName}; } public function set${PropertyName}($$${PropertyName}) { $$this->${PropertyName} = $$${PropertyName}; } ${cursor} エディタ上でCtrl+スペースを押下するとテンプレート・プロポーザルが表示されるので、前述のテンプレート(今回の例なら「getter/setter」)を選択する。 getterとsetterが自動入力される。 テンプレート中の”{PropertyName}”の箇所が選択された状態になるので、設定したい文字列を入力し、Enter。 すると、テンプレート中の”{PropertyName}”の箇所が自動的に入力した文字列に置換される。 ちなみに・・ 上記のテンプレート・パターンだと、”{PropertyName}”の文字列がすべて同じになってしまうため、例えば”user”と入力すると、アクセサは”getuser($user)”のように、全部小文字になる。 気持ち悪い。 ファンクション名はキャメルケースにしたいので、パターンを public function get${PropertyName}() { return $$this->${word_selection}; } public function set${PropertyName}($$${word_selection}) { $$this->${word_selection} = $$${word_selection}; } ${cursor} にしてみた。”${word_selection}”は、エディタ上で選択した文字列で自動的に置換するための定義。 エディタ上に小文字で”user”と入力し、文字列を選択。選択した状態でCtrl+スペースを押下し、テンプレートを選択する。 “{PropertyName}”の部分だけ先頭を大文字で”User”と入力すれば、ファンクション名の部分だけキャメルケースにできる。 たぶん、もっといい方法があるに違いない。 プロになるための PHPプログラミング入門 posted.

PHP Startup: Unable to load dynamic library

  XAMPP+Oracle+EclipseのPHP開発環境を構築した際、Oracle Instant Client経由でDBに接続しようとしたのだが、以下のエラーが発生し、Apacheが起動しなかった。 PHP Startup: Unable to load dynamic library ‘D:\java\xampp\php\ext\php_oci8.dll’ – %1は有効なWin32アプリケーションではありません。 色々調べてみた結果、XAMPPは32bit版なのに、Oracle Instant Clientは64bit版を使っていたことが原因だった。 Oracle Instant Clientを32bit版にしたところ、エラーは発生しなくなった。   PHPでociを使ってOracleに接続するための環境設定は、以下を参照。 XAMPP+Oracle+EclipseのPHP開発環境構築 https://www.cyberarchitect.net/blog/archives/1001

XAMPP+Oracle+EclipseのPHP開発環境構築

  Facebookアプリを作って遊ぼうと思い立ち、PHPの開発環境を作ることにした。 DBは、勝手知ったるOracleを使ってみる。 OSはWindows 7 Enterprise SP1(64bit)を使って環境構築したので、その時のメモ。 ※Oracleは構築済みの環境を利用。キャラクタセットはAL32UTF8。   1、Pleiadesをダウンロード http://mergedoc.sourceforge.jp/index.html#/pleiades_distros3.7.html pleiades-e3.7-php-jre_20120225.zipをダウンロードし、解凍。 今回はD:\Javaに展開。   2、XAMPPをセットアップ D:\Java\xamppディレクトリ配下のsetup_xampp.batを実行。 D:\Java\xampp\apache\confのhttpd.confを編集。ServerRootを設定。 #ServerRoot “D:/Java/xampp/apache” ServerRoot “D:\Java\xampp\apache” ←追記   3、Oracle Instant Clientをダウンロード http://www.oracle.com/technetwork/jp/topics/winsoft-087812-ja.html 32bit版をダウンロードし、展開。今回はD:\Java\instantclient_11_2に展開。 4、php.iniを編集 D:\Java\xampp\php\php.iniを編集。 キャラクタセットを追記。 default_charset = “UTF-8” extension_dirを以下に変更。 extension_dir = “D:\Java\xampp\php\ext” php_oci8.dll先頭のコメントアウト解除(「;」を削除) extension=php_oci8.dll   5、OSの環境変数を設定 コントロールパネル→システムの左ペインにて、システムの詳細設定をクリック。 詳細設定タブ下部、環境変数をクリック。 システム環境変数に変数名 NLS_LANG 、値 Japanese_Japan.AL32UTF8 を追加。 変数名 Path の値の先頭に、Oracle Instant Clientのディレクトリを追記。(今回は D:\Java\instantclient_11_2; ).

libnnz10.so: cannot restore segment prot after reloc: Permission denied

  スタンドアロンのOracle XE10.2.0+apache2.2.14+PHP5.2.12の環境で、apacheを起動しようとした時に発生。 [root@hogehoge bin]# ./apachectl start httpd: Syntax error on line 53 of /usr/local/httpd/conf/httpd.conf: Cannot load /usr/local/httpd/modules/libphp5.so into server: /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libnnz10.so: cannot restore segment prot after reloc: Permission denied ググったら速攻原因がわかり、理由はSELinuxさんが律儀にもシステムを守ってくださっていたからだった。 Thread: Install PHP+Oracle Client ERROR! in libnnz10.so http://forums.oracle.com/forums/thread.jspa?threadID=410361 申し訳ないのだが、apacheを起動する必要があるので、SELinuxさんには一時的に黙って頂くことにした。 setenforce 0

You are *required* to use the date.timezone setting or the date_default_timezone_set() function.

  Apacheのエラーログが膨らんでいたので、なんぞとログを見ると標題のエラーが。 PHPのタイムゾーン設定がされていないと発生することがあるらしい。 php.iniのdate.timezoneに設定を追加。 サーバはAWSのUS-West Regionで運用しているため、タイムゾーンは西海岸のものを設定してみた。 date.timezone = America/Los_Angeles 参考: http://www.phpmanual.jp/timezones.america.html