ます’s Blog - どうでもいい記事100選

どうでもいい記事100選

oci8 extension

非常に使いずらい。何故こんなに環境変数に依存するのだろうか。
LD_LIBRARY_PATHは。。。まぁ、仕方が無い。
PHPoci8 extensionヘタれだけどputenvすると落ちるOracleもどうかと(Oracle9iでは落ちなくなったみたいだが)。


という訳でヘタれにお似合いなヘタれパッチを作成してみた。
埋め込む場所が違うだけで50歩100歩な気もしなくはないが個人的にはApacheの起動スクリプトに埋め込むよりはマシ。
getenvで環境変数が取れない時に初めて埋め込みを行うので既存のやつには影響ありません。
(Solaris8(sparc 64bit) + Apache1.3.33 + PHP4.3.11でしか確認してません)

--- php-4.3.11,orig/ext/oci8/oci8.c	Tue Jun 28 13:37:55 2005
+++ php-4.3.11/ext/oci8/oci8.c	Tue Jun 28 13:37:55 2005
@@ -125,6 +125,7 @@
 }
 
 #include <fcntl.h>
+#include <stdlib.h>
 
 #ifndef O_BINARY
 #define O_BINARY 0
@@ -482,6 +483,32 @@
 #endif
 
 #endif
+	
+	if( getenv( "ORACLE_HOME" ) == NULL )
+	{
+		putenv( "ORACLE_HOME=/usr/local/oracle-9.2.0.1.0" );
+	}
+	
+	if( getenv( "ORACLE_SID" ) == NULL )
+	{
+		putenv( "ORACLE_SID=oracle9i" );
+	}
+	
+	if( getenv( "ORA_NLS33" ) == NULL )
+	{
+		putenv( "ORA_NLS33=/usr/local/oracle-9.2.0.1.0/ocommon/nls/admin/data" );
+	}
+	
+	if( getenv( "NLS_LANG" ) == NULL )
+	{
+		putenv( "NLS_LANG=Japanese_Japan.JA16EUC" );
+	}
+	
+	if( getenv( "LD_LIBRARY_PATH" ) == NULL )
+	{
+		putenv( "LD_LIBRARY_PATH=/usr/local/lib:/usr/local/oracle-9.2.0.1.0/lib:/usr/local/mysql/lib/mysql:/usr/local/pgsql/lib" );
+	}
+	
 
 #if OCI_USE_EMALLOC
  	OCIInitialize(PHP_OCI_INIT_MODE, NULL, ocimalloc, ocirealloc, ocifree);

putenvは環境依存する可能性があるラシイ。