gpt4 book ai didi

php - 有没有办法在Windows上通过PHP利用Oracle钱包?

转载 作者:行者123 更新时间:2023-12-03 11:14:00 25 4
gpt4 key购买 nike

我有一个驻留在连接Oracle数据库的Windows服务器上的PHP代码库。我的数据库正在云设置中迁移到Oracle,这需要我们使用Oracle钱包进行连接。
我得到了用于钱包的设置,并且可以通过实用程序进行连接,但是到目前为止,我的所有研究工作都是使用oci_connect()和session_mode为OCI_CRED_EXT的。但是PHP的oci_connect(https://www.php.net/manual/en/function.oci-connect.php)指出“出于安全原因,Windows不支持OCI_CRED_EXT”。
有没有办法在Windows上通过PHP利用Oracle钱包?

最佳答案

Oracle Cloud钱包提供相互TLS以确保安全性,但是您仍然需要传递数据库用户名和密码。因此,您不使用外部身份验证。
您只需要确保Oracle Net可以找到钱包,要么使用下面使用的Easy Connect Plus语法(wallet_location是包含cwallet.sso文件的目录),要么通过编辑sqlnet.ora(或将其放在默认位置)。参见How to connect to Oracle Autonomous Cloud Databases
对我有用的代码是:

<?php

error_reporting(E_ALL);
ini_set('display_errors', 'On');

$c = oci_connect('cj', 'topsecret', 'tcps://adb.ap-melbourne-1.oraclecloud.com:1522/xxxxxx.adb.oraclecloud.com?wallet_location=/Users/cjones/Cloud/alwaysfree/CJDBMELB');

if (!$c) {
$m = oci_error();
trigger_error('Could not connect to database: '. $m['message'], E_USER_ERROR);
}

$s = oci_parse($c, "select * from dual");
if (!$s) {
$m = oci_error($c);
trigger_error('Could not parse statement: '. $m['message'], E_USER_ERROR);
}

$r = oci_execute($s);
if (!$r) {
$m = oci_error($s);
trigger_error('Could not execute statement: '. $m['message'], E_USER_ERROR);
}

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

?>

关于php - 有没有办法在Windows上通过PHP利用Oracle钱包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65149568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com