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

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

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

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

Q&A

解決済

3回答

4828閲覧

ディレクトリ(文字列)の中の変数

SugiuraY

総合スコア317

PHP

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

0グッド

0クリップ

投稿2017/02/16 09:06

お世話になります。
①下記のようにパスのなかに変数を使用したい場合、
シングルクオテーション、ダブルクオテーションとドットを使用しても
うまく使用することができないのですがご助言を頂けますでしょうか?

②また、仮にB)のよう直接数字が入っていた場合、\325と\201の色がエディター上色が変わってしまうのですが、これはエスケープすべき特別な意味を持ってしまうのでしょうか?

宜しくお願い申し上げます。

php

1 2 3A) 4$foo=1111; 5$hoge=2222; 6if (file_exists("C:\MAMP\htdocs\FSDB\Z_xbrl\.$foo.\.$hoge")) 7 {echo ("○");}else{ 8 echo "-";} 9 10//C:\MAMP\htdocs\FSDB\Z_xbrl\1111\2222") 11 12 13B) 14file_exists("C:\MAMP\htdocs\FSDB\Z_xbrl\32567\201103")

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

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

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

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

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

guest

回答3

0

ベストアンサー

文字列を接続するための . の利用について混乱されているようですね。

"A" . "B" で ABとなります。

$fname = "C:\MAMP\htdocs\FSDB\Z_xbrl.$foo..$hoge";
上記$fnameを表示してみれば、どのようになっているかわかるはずです。
""内で変数を利用する場合、.で接続する必要はありません。
ただし、変数と文字の区別がつかない場合には、${foo}といった形で指定します。

投稿2017/02/16 09:27

t_obara

総合スコア5488

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

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

SugiuraY

2017/02/16 09:41

ご回答有難うございます。 帰ってすぐ出力結果を見て見ます!
guest

0

\はエスケープしてください。

php

1$foo=1111; 2$hoge=2222; 3file_exists('C:\\MAMP\\htdocs\\FSDB\\Z_xbrl\\' . $foo . '\\' .$hoge); 4file_exists("C:\\MAMP\\htdocs\\FSDB\\Z_xbrl\\" . $foo . "\\" . $hoge); 5file_exists("C:\\MAMP\\htdocs\\FSDB\\Z_xbrl\\${foo}\\${hoge});

理想はディレクトリ区切り文字の\は使用せず、DIRECTORY_SEPARATOR定数(またはPATH_SEPARATOR定数`)を使用してください。
まぁ、C:\となっている時点でWindows確定なのでここまでは不要かも。

php

1$foo=1111; 2$hoge=2222; 3file_exists('C:' . DIRECTORY_SEPARATOR . 'MAMP' . DIRECTORY_SEPARATOR . 'htdocs' . DIRECTORY_SEPARATOR . 'FSDB' . DIRECTORY_SEPARATOR . 'Z_xbrl' . DIRECTORY_SEPARATOR . $foo . DIRECTORY_SEPARATOR .$hoge);

②また、仮にB)のよう直接数字が入っていた場合、\325と\201の色がエディター上色が変わってしまうのですが、これはエスケープすべき特別な意味を持ってしまうのでしょうか?

はい。\の後ろが0-7の場合は8進数となります。
エスケープ・"'についての詳しくはマニュアルを参照ください。
(php.net)文字列

投稿2017/02/16 09:32

編集2017/02/16 09:43
Y.H.

総合スコア7914

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

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

SugiuraY

2017/02/16 09:37

ご回答有難うございます。セパレーターは初めて知りました。大変、勉強になります。
Y.H.

2017/02/16 09:51

>囲みエスケープしなくてもディレクトリをしていできるのですが、違いは何処にあるのでしょうか? http://php.net/manual/ja/language.types.string.php \の次の文字がマニュアルに記載されている「エスケープされた文字」に該当しない場合は\\としなくても\になります。 ¥の次に数字の0-7が最大3文字あればこの範囲で8進数という意味になります。 \32567は8進数 の \325 と文字列の67 \201103は8進数 の \201 と文字列の103
SugiuraY

2017/02/16 10:33

バックスラッシュと数字の組み合わせで8進数の表現があるんですね、有難うございます!
guest

0

PHPのダブルクォーテーションで囲まれた文字列では、\マークはエスケープシーケンスと呼ばれる特別な記号として扱われるため、本来の\として扱うには\と打ち込む必要があります。
※シングルクォーテーションで囲まれた文字列の場合、エスケープシーケンスにならず、\そのままで使えます。

PHP

1if (file_exists("C:\\MAMP\\htdocs\\FSDB\\Z_xbrl\\.$foo.\\.$hoge")) 2 3file_exists("C:\\MAMP\\htdocs\\FSDB\\Z_xbrl\\32567\\201103")

投稿2017/02/16 09:27

編集2017/02/16 09:47
masaya_ohashi

総合スコア9206

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

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

SugiuraY

2017/02/16 09:40

ご回答有難うございます。因みに変数を入れない場合、すなわち直接数字を打ち込んだ場合、ダブルクオテーションで、囲みエスケープしなくてもディレクトリをしていできるのですが、違いは何処にあるのでしょうか?
masaya_ohashi

2017/02/16 09:46

ダブルクォーテーションではなくシングルクォーテーションで囲った文字列の場合はエスケープシーケンスとして認識しないので、\は\のまま使えます。
masaya_ohashi

2017/02/16 09:46

ちょっと回答を修正しておきます。
SugiuraY

2017/02/16 10:31

クリアになりました! 有難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問