CentOs上のphpからPDOを使ってSQLServerに接続しようとしたところ、以下のエラーが表示されて繋がらないとのことで軽い気持ちで解析を手伝っていたら、unixODBCだったりFreeTDSだったりと複雑な環境もあり、・・・・・・ハマった。
◆エラー・・・というよりExeptionのメッセージ
[unixODBC][FreeTDS][SQL Server] Unable to connect: Adaptive Server is unavailable or does not existtest 
◆ソース
?php
$dsn = 'odbc:AAAA';
$user = 'XXX';
$password = 'YYY';
try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?
◆解決した方法
今回の問題はSELinuxとやらの設定だった。参考→ ここ
httpd_can_network_connect がoff(無効)になっているのを有効に変えただけ。
設定の確認コマンド
# getsebool httpd_can_network_connect
httpd_can_network_connect --> on  (有効の場合)
httpd_can_network_connect --> off (無効の場合)
設定の変更コマンド
# setsebool httpd_can_network_connect 1
※getseboolで確認だったので、勘でsetseboolでやってみたところできてしまった。1にしたらonになったので、0だったらoffだと思。
※真面目に使う人はちゃんと調べましょう。
unixODBCでも、FreeTDSでも、SQL Serverでも、apacheでも、php.iniでもないとか・・・ハマれるっ!!    で、SELinuxって何?
聞いてみたところ、SELinuxはdisableにしちゃうのが普通らしい。
	 
	
	
	
west 10:17 AM | 2015年7月21日 パーマリンク | ログインして返信する
うわっ!? ここ見てる人ってまだいたのね・・・(-_-;)
マシュマロ ☝いいね+1
ueno 10:22 PM | 2015年7月16日 パーマリンク | ログインして返信する
マシュマロに1票!