2017-01-18 66 views
1

我有Oracle Express 11g安裝在Slackware linux上並正在運行。我能夠連接到它並運行查詢。 我安裝了apache和php並安裝了oci8。 phpinfo()顯示oci8已加載並啓用。 對於以下簡單的PHP腳本的網頁顯示:頁面不顯示與apache和php和OCI8和Oracle Express 11g

<?php echo "Hello World!!!"; ?> 

這麼說PHP在Apache是​​工作。 現在對於下面的簡單連接到Oracle和顯示的版本:

<html> 
<body> 
Oracle Version <br/> 
<?php 

$conn = oci_connect('SYSTEM', 'password', 'localhost/XE'); 

$stid = oci_parse($conn, 'select banner from v$version'); 
oci_execute($stid); 

echo "<table>\n"; 
while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) { 
    echo "<tr>\n"; 
    foreach ($row as $item) { 
     echo " <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;")."</td>\n"; 
    } 
    echo "</tr>\n"; 
} 
echo "</table>\n"; 

?> 
</body> 
</html> 

這是從查看源文件在Web瀏覽器中執行以下操作:

<html> 
<body> 
Oracle Version <br/> 
<table> 
</table> 
</body> 
</html> 

然而,當我運行的/ usr腳本/ bin/php oratest.php它輸出正確:

<html> 
<body> 
Oracle Version <br/> 
<table> 
<tr> 
    <td>Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production</td> 
</tr> 
<tr> 
    <td>PL/SQL Release 11.2.0.2.0 - Production</td> 
</tr> 
<tr> 
    <td>CORE  11.2.0.2.0  Production</td> 
</tr> 
<tr> 
    <td>TNS for Linux: Version 11.2.0.2.0 - Production</td> 
</tr> 
<tr> 
    <td>NLSRTL Version 11.2.0.2.0 - Production</td> 
</tr> 
</table> 
</body> 
</html> 

這怎麼可能。爲什麼命令行PHP工作和Apache提供相同的PHP腳本不起作用。並且由相同的apache提供的phpinfo()顯示oci8已安裝並啓用。

如果您有任何意見,請提前致謝。

回答

0

由於ORACLE_HOME和LD_LIBRARY_PATH未針對Oracle即時客戶端和Oracle Express 11g等安裝路徑設置正確,因此發生錯誤。 我在php代碼開始時使用了putenv()php指令,它沒有任何錯誤。

putenv("ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe"); 
putenv("LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/xe/lib:/usr/lib64/oracle/12.1/client64/lib"); 
+0

我強烈建議不要使用putenv()。過去這一直很成問題。相反,請將變量添加到正確的Apache初始化腳本中,例如RH Linux上的/ etc/sysconfig/httpd。閱讀免費的PHP和Oracle書籍http://www.oracle.com/technetwork/topics/php/underground-php-oracle-manual-098250.html –

+0

我在Slackware上,無法以任何其他方式工作。 –

+0

繼續尋找。我懷疑他們從Apache中刪除了一個功能。 –