我们使用connect.php中定义的字符串,但现在我们有一些启用了silverilght的服务,它们利用IIS中的web.config作为连接字符串。
所以,不是在两个地方连接字符串,我可以从PHP访问web.config中的连接字符串吗?这也将使最终用户更容易改变。
答案 0 :(得分:2)
我知道这是一个非常老的线程,但最近我遇到了类似的问题。我只是想为那些需要它的人分享我的解决方案。它100%服务于我的目的,希望它也能帮到你。
在我的web.config连接字符串节点中看起来像:
<connectionStrings>
<add name="sqlDB" connectionString="Server=xxx.xxx.xxx.xxx; Database=db_name; User Id=sqlserver_user_name; password=sqlserver_password;Max Pool Size=2000;" providerName="System.Data.SqlClient" />
</connectionStrings>
我编写了以下PHP代码来检索sql server连接信息,以便在PHP中使用它
<?php
// start get connection string from web.config
$xml = simplexml_load_file("../Web.config") or die("Error: Cannot create object");
//in my case web.config is in previous directory
$array = json_decode(json_encode((array) $xml), 1);
$server = "";
$database = "";
$user = "";
$password = "";
$fullString = ($xml->connectionStrings->add[0]["connectionString"]);
$strArr = explode(";", $fullString);
$arrCount = count($strArr);
$connArr[]="";
for($x=0;$x<$arrCount-1;$x++){
$aS = explode("=",$strArr[$x]);
$connArr+=array(strtolower(trim($aS[0])) => trim($aS[1]));
}
$server = $connArr["server"];
$database = $connArr["database"];
$user = $connArr["user id"];
$password = $connArr["password"];
// end get connection string from web.config
$connectionInfo = array( "UID"=>$user,
"PWD"=>$password,
"Database"=>$database,
"CharacterSet" => "UTF-8");
/* Connect using SQL Server Authentication. */
$conn = sqlsrv_connect( $server, $connectionInfo);
?>
仅供参考:在我的情况下,web.config和php文件位于同一个域中并位于相同的根目录下。如果您在跨域环境中工作,首先应考虑从远程位置读取web.config,但出于安全原因,这不是明智的决定。
由于
答案 1 :(得分:1)
是的,你可以。
段:
public function Load( $xmlfile )
{
if ( is_readable( $xmlfile ) ) {
$config = $this->xml2array( simplexml_load_file( $xmlfile ) );
}