MySQLのDB接続設定(mysql_connectとmysql_select_dbの内容)を、config.phpにまとめて記述しています。
この中にサイトURL($site_url="http://localhost")も記述されているとします。
そこで質問ですが、関数内でconfig.phpを使う場合、どのようにされていますでしょうか?
■ファイル名(sidenavi.php)
function sideNavi(){
$sql="select * from datalist";
$res=mysql_query($sql,$conn);
while($row=mysql_fetch_array($res)){
echo "<a href=\"{$site_url}\">$row["name"]."</a><br/>";
}
}
このようなソースが合った場合を仮定します。
ファイル構造は
/config.php
/include/sidenavi.php
となっていると仮定します。(※ただし、構造が変わる可能性もあり)
上記のような単純なコードの場合は、classを使用してconfig.php内のDB接続情報をfunction内に送っていますが、今回はclassを使用しない方法でお願いします。
より良い回答をいただけた方には多くのポイントを差し上げます。
require("config.php"); //ここで、$connにDBを接続するコードを書く //接続の為のコードは省略します。 sideNavi($conn,$site_url); function sideNavi($conn,$site_url){ //省略 }
でいいと思います。
$connについては、これでいいと思いますが、
関数内で使う設定情報が$site_urlだけでなく、他にも多くある場合、引数の数が多くなることになります。
そこで、私は、設定ファイルをINIファイル形式で書き、関数の外で
$Conf = parse_ini_file( '設定ファイル名', true );
として設定情報を配列として$Confに格納し、$Confを引数として関数に渡します。関数内では、$Conf['site_url']で情報を引き出します。
sideNavi( $conn, $Conf ); function sideNavi($conn,$Conf ){ //省略 echo "<a href=\"{$Conf['site_url']}\">$row["name"]."</a><br/>"; //省略 }
http://jp.php.net/manual/ja/function.require-once.php
require_onceを使っていますが、相対パスで使う場合、最初にアクセスされるphpファイルの位置によって変わってくるのがやっかいです。かといって絶対パスでは長くなりますし、後で構造が変わった場合は面倒です。
ファイルへのパスを下記とします
/h/o/g/e/config.php /h/o/g/e/include/sidenavi.php
この場合
define('HOGE_ROOT', '/h/o/g/e');a ini_set('include_path', HOGE_ROOT.':'.ini_get('include_path'));
とinclude_pathに設定することでphpに探させるようにして、相対パスでアクセスするようにしています
位置が変わる程度であればHOGE_ROOTを変えることだけで済みます。
require_once 'config.php' require_once 'include/sidenavi.php'
ただdefineとini_set()を毎回書くのは面倒なのでinit.phpとしています。
require_once '../init.php' require_once 'config.php' require_once 'include/sidenavi.php'
init.phpの時点ではまだinclude_pathは設定されていないのでそのphpスクリプトファイルの位置からinit.phpまでのパスを正しく設定しなければなりませんが以降は有効です。
MySQLのDB接続設定を、config.phpにまとめて記述しているのであればDBへの操作もconfig.phpへ記述したほうがいいと思うのですが(class的な考えなのでダメか)
function sideNavi(){ $sql="select * from datalist"; $res=mysql_query($sql,$conn); $data = array(); while($row=mysql_fetch_array($res)) $data[] = $row["name"]; return array($site_url, $data); }
require_once '../init.php' require_once 'config.php' list($site_url, $data) = sideNavi() foreach ($data as $name) { echo "<a href=\"{$site_url}\">{$name}"</a><br/>"; }
ご丁寧にありがとうございます。
少々私には複雑に感じられましたが、テストしながら試してみます。
ありがとうございます。parse_ini_fileを使うのは全く想定していませんでした。
参考にさせていただきます。