質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

258閲覧

PHPでのデータベース接続について

ikou20190203

総合スコア15

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/02/03 05:57

編集2019/02/04 12:44

前提・実現したいこと

PHPにて、データベース接続用のファイルを作成したい。
現状、各画面ファイルにデータベース接続処理を書いているので
データベース名やユーザーなどがばらばらに管理されている状態。

発生している問題・エラーメッセージ

各ファイルにデータベースへの接続処理が記載されている。
管理が煩雑化している。

該当のソースコード

下記のコードをすべてのファイルの先頭につけている。

//--データベースへ接続--// function CONNECT_DATABASE() { global $CONN; $CONN = oci_connect("KENSHU1", "KENSHU1", "XE", "AL32UTF8"); }

試したこと

別のPHPファイルに接続処理のみを記載したが
各ファイルからそのファイルを使うことができない。

下記、質問補足内容。
(動作するようになってから時間が経っているので正しく再現できているかわかりません。申し訳ないです。)

require $_SERVER['DOCUMENT_ROOT'].'\test\Database.php'; // require "C:\Program Files\PHP\workspace\test\test\Database.php";

上記コードで実行するとエラーとなり、
コメントアウトしているコードで実行すると正しく動作する。
下記はエラーとなった場合のエラーメッセージ。
Warning: require(C:/Program Files/PHP/workspace\test\Database.php): failed to open stream: No such file or directory in C:\Program Files\PHP\workspace\test\Screen\login.php on line 4

Fatal error: require(): Failed opening required 'C:/Program Files/PHP/workspace\test\Database.php' (include_path='C:\xampp\php\PEAR') in C:\Program Files\PHP\workspace\test\Screen\login.php on line 4

補足情報(FW/ツールのバージョンなど)

PHP Version 7.3.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2019/02/03 07:27

> 別のPHPファイルに接続処理を記載したが > 各ファイルからそのファイルを使うことができない。 どのように記載したのか具体的なコードを書いていただけないでしょうか?
ikou20190203

2019/02/03 07:43

失礼しました。 自分で作業をしててなんとなく原因はわかりました。 しかし、別のことでわからないことがあります。 質問内容が変わってしまって申し訳ないのですが、下記コードがエラーとなります。 require $_SERVER['DOCUMENT_ROOT'].'\test\Database.php'; // require "C:\Program Files\PHP\workspace\test\test\Database.php"; requireすることで別のファイルを読み込むことはわかったのですが、 直接パスを書くのはよくないかと思い、 実行ファイルのパスを取得できるとのことで[$_SERVER]を使いました。 パスを直書きする場合(コメントアウト行)は動きますが、[$_SERVER]を使ったほうはエラーとなります。 原因がわかれば教えていただきたく思います。
m.ts10806

2019/02/03 08:21

質問は編集できますので適宜ご対応ください。 ちなみに「エラーとなります」のエラーメッセージもご提示ください。 回答者も同様のコードで再現するか確認して調整してから回答することが多いですが、再現できるコードと表示されているエラーメッセージがないからには的確な回答になりません。
guest

回答1

0

ベストアンサー

$_SERVERより定数__DIR__を使うべきかと。

__DIR__が書かれているファイルのディレクトリまでの絶対パスが入ってくるのでそこから相対パスにすると良いです。
あとディレクトリの区切りは\など環境依存のものをそのまま書くのではなく、定数DIRECTORY_SEPARATOR を利用してください。
※長いので設定ファイルなど全てのファイルから読み込まれるファイルにdefine("DS",DIRECTORY_SEPARATOR );のように短縮する定数を用意すると楽です。

ただ、今はautoloaderを採用したもののほうが主流かなと(余裕があればautoloader導入してみてください)

投稿2019/02/03 08:11

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikou20190203

2019/02/04 13:09 編集

色々教えていただきありがとうございます。 参考になりました。 2019/02/04補足 $_SERVER['DOCUMENT_ROOT']によって実行中のファイルの絶対パスが取得できると考えていた。 それっぽい値が取れていたが、ディレクトリ区切り文字が環境に適応した値で取れていなかった。 そのためにエラーとなっていた。 (本当はそうではないかもしれない。 改めて$_SERVER['DOCUMENT_ROOT']で実行してみると、 ディレクトリ区切り文字が違っていてもエラーとならない。 もしかしたら、ただパスを間違えていただけかもしれないです。 そもそも$_SERVER['DOCUMENT_ROOT']は実行ファイルの絶対パスではなく プロジェクトのTOPのパスであった。) 結局、パスが間違っていてrequireできていなかったようです。 ご迷惑おかけしました。 ディレクトリ区切り文字は定数で取得します。 ただ、define("DS",DIRECTORY_SEPARATOR );を全ファイルに適応する方法がわかりません。 「define("DS",DIRECTORY_SEPARATOR);」のみを書いたファイルを作成しても そのファイルを参照するためにDIRECTORY_SEPARATORを使わなければならないのがもどかしいです。 今回はautoloaderなるものは導入しません。 とりあえずrequireで常にファイルを参照します。
m.ts10806

2019/02/03 13:10

解決済みは良いのですがどのように解決されたのか書かれないと後から見たときに誰も何もわかりませんし、回答した側としては本当に理解が得られたのか本当に意図が伝わったのかが分かりませんので、具体的に解決した内容をコメントしていただけたらと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問