ローカルとリモートでのパス区切り文字の違いについて

このQ&Aのポイント
  • パス区切り文字の違いによるコーディングの問題について相談です。
  • ローカルでは「¥」を使い、リモートでは「/」を使う必要があります。
  • どのようにしてパス区切り文字の違いに対応すれば良いのか教えてください。
回答を見る
  • ベストアンサー

パス区切り文字(¥と/)

書いたPHPスクリプトを、 ローカルではWindows版XAMPP上で動作確認し、 リモートでは実際にLinux系サーバーで動かしています。 ローカルで書いたコードを、(当たり前ですが、)手を加えずに、 そのままの形で、リモートでも使えたらいいなと、いつも思っているわけですが、 サーバーOSが、WinとLinuxと、異なるため、 パス周りのコーディングで、しばしば、つまずいてしまいます。 例えば、 echo dirname(__FILE__) ; では、 パス区切り文字として、 リモート: / (スラッシュ) ローカル: ¥ (バックスラッシュ) といった違いが生じたりします。 ローカルのWindows環境でも、パス区切り文字として「/」を使えるので、 手打ちの部分においては、どちらのOSでも使える「/」(スラッシュ)で対応していますが、 先ほどのdirname(__FILE__) の例のような場合には、本当に困ってしまいます。 (文字列置換関数や正規表現なんかで、いちいち変換すべきなのでしょうか?) 何か、上手い知恵などありましたら、どなたか教えてください。

  • march4
  • お礼率83% (628/754)
  • PHP
  • 回答数5
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 DIRECTORY_SEPARATOR でPHPが稼働しているOSの区切り文字が取得できますがいかがでしょうか。

march4
質問者

お礼

回答をありがとうございます。 あぁ~、そういうの、ありましたね~!w PHPユーザの多くが、 ローカルはWindows、リモートがUnix系OS、 という環境でしょうから、 この、パスの区切り文字の違いは、 皆さん、何らかの形で克服しているものと思っておりましたが、 その解決策の有力候補が、まさか、この、 DIRECTORY_SEPARATOR だったとは!?w こんな、いかにもなモノが用意されているくらいですから、 おそらく、このDIRECTORY_SEPARATORを使うというのが、 ベストな作法なのでしょうが、、、 それにしても、、 長い。。。(パス文字は1文字だというのに。。。こやつ、長すぎる。。。) あんまり使いたくない。。。w まぁ、これを、さらにdefine()で、短く定義しなおして使う なんていうのもアリなんでしょうけれど、 そういうのは、あまり好きではないかなぁ。。。とか、ゴニョゴニョ言っちゃう。 っていうか、皆さんは、本当にこれを使っているんでしょうかね?!w

その他の回答 (4)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.5

>sqlite PDOのDSN接頭辞では絶対パスの入力を求めてくるので、 >そこだけは絶対パスで書いてます。 DSNこそ「データベースを扱う全部のスクリプトで共通に読み込む」ファイルに書くだけですね。 #common.incでなければdb.incとかww たとえ(SQLiteでなく)MySQLだったとしても、ローカルのテスト環境と本番環境で同一ということはまずありませんから。逆に「あちこちのスクリプトに書いている」のであれば、そっちの方がマズイ気がします(汗

march4
質問者

お礼

回答をありがとうございます。 参考にさせて頂きます!

回答No.4

私もVMwareにlinux入れて仮想サーバ立ててやってます。

march4
質問者

お礼

回答をありがとうございます。 >VMwareにlinux入れて仮想サーバ立ててやってます。 参考になりました。ありがとうございます。

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

ほとんど「/」だけで書いてます。 私の場合は、そもそも「フルパス(サーバパス)」で記述しなければいけない場面を作りません。どうしても必要な場合には、全部のスクリプトで読み込む共通部(common.incとか)で定義して使います(サーバが変われば、その部分だけ書き換える)。 まぁそのcommon.incでdirname(__FILE__)を元に生成してもいいんでしょうけど・・・

march4
質問者

お礼

回答をありがとうございます。 (こちらにお礼をするのを忘れておりました。失礼しました。) >ほとんど「/」だけで書いてます。 >そもそも「フルパス(サーバパス)」で記述しなければいけない場面を作りません。 私も似たような考え方でコーディングをしているのですが、 sqlite PDOのDSN接頭辞では絶対パスの入力を求めてくるので、 そこだけは絶対パスで書いてます。 (そんなsqliteなんて使うな、というお話は無しでお願いしますw)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 開発環境(コーディング等)はWindowsですが、VMを利用してLinuxサーバーで検証してますよ。 よって、自分は使ってないです。

march4
質問者

お礼

回答をありがとうございます。 >VMを利用してLinuxサーバーで検証 そ、そんな方法もあるんですね。。。!! WinとLinuxの挙動の違いというのは、 パスの区切り文字以外の所にも表れるでしょうから、 そうしたことも考慮すると、 検証も、「本番と同じLinux環境で」出来たら、 やはり安心ですよね。 私も今後、検討してみたいなと思います。

関連するQ&A

  • パス区切りの文字について

    ちょっと素朴な疑問から質問します。 Windows OS の環境下(限定)でパスの区切り文字として(\)文字と(/)文字の どちらの文字を普段は利用しますか? 多くの場合は両方ともパス区切りとして有効ですが、一部(/)文字では上手く パスを指定できなかった経験があります。そこでパス区切りとしては(\)文字を 普段は使っています。文字列では \\ と重ねるため見づらいこともありますが (/)文字より(\)文字を使った方が安全(必ず指定できる)という考えで使っています。 皆様はパス区切りの文字として(\)文字、(/)文字のどちらを利用しますか? また理由があって使い分けていますか? この2点についてお聞きしたいです。 それでは回答をお待ちしています。

  • include_pathについて。

    PHP 5.2以上のバージョンの話として質問をさせて頂きます。 (ローカルではWindows版XAMPPを使用。リモートはLinuxサーバー。) ----- <ファイルの位置関係> imgディレクトリ --- C.jpg (画像ファイル) mainディレクトリ --- A.php sub ディレクトリ --- funcディレクトリ --- B.php (img、main、subディレクトリは3つとも同階層) //------- (A.phpの記述) require_once '../sub/func/B.php'; //------- (B.phpの記述) echo '<img src="C.jpgのパス">'; // ←■画像Cを表示したい■ //★どう表示されるかテスト★ echo dirname(__FILE__) ;   //----- このような状況で、 A.phpにアクセスすると、★テスト★の所は、 ~/sub/func   //←のように表示される。 // つまりこれは、__FILE__ は、 // A.phpではなく、B.phpを指している。(?) と、このような時、B.phpの中で、 C画像の相対パスは、どう書いたらよろしいのでしょうか? A.phpから見た、C画像の相対パスで書いたらいい? それとも、B.phpから見たソレでしょうか? phpinfo()でinclude_pathの項目を調べると、 .:/usr/local/lib/php/~ のように書かれています。(デフォルトのままです。)

    • ベストアンサー
    • PHP
  • FTPでダウンロードするときのパス指定

    リモートからダウンロードするときにパス指定をしてローカルにファイルをゲットしてきたいのですが、getするとき、パス指定の方法がわかりません。 もし、無理なようならダウンロード後に use File::Copy; のmoveを使って指定パスに移動してもよいのですが、指定方法がわかりません。 よろしくおねがいします。

    • ベストアンサー
    • Perl
  • ローカル→サーバ wordpressのパス

    はじめまして。 自力で調べたのですが、どうしてもわからないので質問させてください。 ローカル環境にxamppをインストールし、そこにwordpressベースのサイトを作りました。 そこで作ったものをテスト用のレンタルサーバにアップロードし、データベースの移行も済んだのですが、全てのパスがローカルのものになってしまっています。 (例えば、本来は http://mydomain/images~ としたいのですが、http://127.0.0.1/images~ となってしまいます。) これは何が原因なのでしょうか? 一旦全てのデータをもう一度ローカルに落としパスを書き換えれば済むことなのかもしれないですが、納品物のため、さらに別のサーバに移す必要があるので、今の段階で解決したいと思っています。 どうぞよろしくお願いします。

  • RDP接続先のファイルを絶対パスで指定するには

    現在リモートデスクトップ接続でWindowsサーバーと接続しています。このサーバ上の任意のファイルをリモートデスクトップ画面上でコピーしてローカルのPCにペーストすることができます。しかし毎回コピーペーストするのは大変なので、ローカルのexplorerから絶対パスでリモートのファイルにアクセスできないでしょうか。できるとしたら、この時に絶対パスの形はどのようにすればよいでしょうか。リモートの接続先コンピュータ名、ドメイン名、ユーザ名、RDゲートウェイサーバ名はわかっています。 リモートのexplorerからローカルPCのファイルには直接アクセスができるので、この逆もできるとは思うのですが方法がわかりません。どなたか教えていただけますでしょうか。

  • include_pathについて

    連続投稿もうしわけございません。 よろしければ質問にお答えお願いします include_pathについてなのですが、現在レンサバ.comにてサーバーを レンタルしているのでが、phpinfo()で調べたら .: と書いてあるだけです。ネットで調べてたら大抵 usr/~って書いてありますよね? どこかのサイトで <?php echo realpath(dirname(__FILE__)); ?> で調べられると聞いたので、試したら /export/saba3/www/jp/r/e/gmoserver/●/●/*****/*****.com と出てきました。これはなんですか? 一応includeしているのですが、このままで大丈夫なのでしょうか? サポートに連絡してもサポート外といわれてしまいました。 自分は今回初めてサーバーをレンタルした者で、一切の知識が無く ネットで調べてたのですが、全然理解できないので投稿させてもらいました。アドバイスよろしくお願い致します。

    • ベストアンサー
    • PHP
  • ローカルでのhtmlチェックについて(絶対パス指定)

    しょうもない質問ですみません。 絶対パス指定を基本としたウェブサイトを構築しようとしているのですが、ローカルの環境ではチェックがままなりません。 リンクや画像の指定に、「./」や「../」を使わず、 「/~.html」などとしたいのです。 でも、ローカル(この場合、WinXP)ではディスクの直下にファイルを保存しても、 file:///c:/index.html (cドライブの場合)となってしまい、絶対パスで「/index.html」と指定した際に、ローカル環境でリンクされる「file:///index.html」と違ってきてしまい、うまいこと製作が進みません。 この場合、どうしたら簡単にローカル環境にサーバーと同様の環境を再現できるのでしょうか?

    • ベストアンサー
    • HTML
  • ドメインは大文字小文字は区別しない・・・。??

     ドメインは大文字小文字は区別しないかとおもいますが、パスはするようですね。  なぜ区別するのでしょうか? サーバーは何を使っているのかは知りませんが、WIN系であろうがLinux系であろうが、システムをチクチクといじくれば出来ないことはないと思います。  しない理由があるのでしょうか?    

  • WinとLinux両方で通じる書き方で、.htaceessに「php_value include_path」を書きたい

    WinとLinux両方で通じる書き方で、.htaceessに「php_value include_path」を書きたい 表題の通りなのですが、 WinとLinux両方で通じる書き方で、.htaceessに「php_value include_path」を書きたいと思っています。 具体的に申しますと・・・ とあるLAMP(CentOS,Apache2,MySQL4,PHP4)で動くシステムを作っている途中です。 で、WindowsXP上のエクリプスでPHPソースを書いて、 それをLinuxサーバに挙げて、MySQLを触るときは、 Linuxのシェルでやっていました。 ですが、 「Windows上のエクリプス+<XAMPP>」での開発が、ちょっとだけテストするのにはラクだと気づき、 そういう方法の開発に移行してみようかなと思っています。 (もちろん、XAMPPとLAMPではバージョン違いなどもあるので、たびたびLinuxにあげて確認しますが) で、 WinとLinux両方で通じる書き方で、.htaceessに「php_value include_path」を書きたい、とおもったしだいです。 「.htaccess」に、いままでは、 php_value include_path ../fwsys/:../fwsys/include/ とだけ書いていたのですが、 「:」の部分、Windowsだと「;」ではないとだめですよね。 ==================================================================== 思ったのですが、WinXP,Linuxのどちらでもうごくように ---------------------------------------------------- #for linux php_value include_path ../fwsys/:../fwsys/include/ #for windows php_value include_path ../fwsys/;../fwsys/include/ ---------------------------------------------------- と書くのは、問題がおこりうるでしょうか? ちょっと、家にあるWinXPでためしたところ、特に問題はないようなのですが、家にはLinuxがなく、 いまゴールデンウィークなので、会社にはいけず、 Linuxではためせない状況です。 ==================================================================== あるいは、もっといいアイディアはないでしょうか? XAMPPのphp.iniやhttpd.confをいじってもまったくかまいません。 ==================================================================== どなたかお答えいただければ幸いです。

    • 締切済み
    • PHP
  • linuxのpathと別名的な事について

    linuxのpathと別名的な事について os:cent os postgresをインストールした環境があります。 ある環境では /usr/local/pgsql/bin/にpsqlがいて シェルで「/usr/local/pgsql/bin/psql」と記述しているスクリプトがあります。 これを別の環境に持っていったのですが、そこでは /usr/bin/にpsqlがいます。 全部書き換えるのも面倒ですので、 「/usr/local/pgsql/bin/psql」と書かれた内容を サーバーの設定で「/usr/bin/psql」と読みかえて動いてくれれば助かります。 要するに、 実行する環境と、試験する環境でパスが異なるので、 スクリプトに手を付けずに試験環境の設定を操作して試験がしたいという事です。 可能でしょうか?

専門家に質問してみよう