2011-06-25 8 views
3

WindowsでPHPプロジェクトを構築しましたが、Windowsのfun.phpとFun.phpはLinuxでも同じですが分かります。
Q1->私のプロジェクトはLinuxで動作するので、この問題を解決するにはどうすればいいですか?
Q2->正確なファイル名が存在しない場合は、エラーを表示する必要があります。それを行う方法?問題を作成しませんPHPが大文字と小文字を区別するファイルシステムに含まれている問題

私はtemplate.phpで、この2 PHPファイルを持っているとrender.php
render.php

include 'Template.php'; 

のコード私はこの問題を解決することができるように警告を取得したいです[ Windowsの場合、Linuxの場合]

+3

ファイル名に大文字小文字を区別しないでください。 –

+0

これらの答えはすべて問題ありませんが、これを尋ねてそのうちの1つを実装するのに要した時間に、ファイル名を修正するだけでした。 –

+1

@ Rafeさんのコメントに...あまりにもファイルに名前を付けるのは悪い習慣のようです。それが私だったら(誰が混乱したかに関係なく)、私はそれをきれいにするでしょう。ファイル名を修正し、機能/回避策を渡して元に戻します。ここに質問を投稿するための新しい注意事項が作成されます。 :) – Dawson

答えて

4

解決策1:すべて小文字を使用してください。 解決策2:毎回まったく同じケースを使用してください。ファイル名が「テンプレート」のときに「テンプレート」を含めるのではなく、最初に小文字の「テンプレート」を含めます。ほとんどのプログラミング言語では大文字と小文字が区別されますので、実際に入るのが最善です。この問題ではfilenameが一意であるかもしれませんが、たとえば、PHPの変数は同じ大文字と小文字を使用する必要があります。そのため、ファイル名に同じプリンシパルを適用してください。

1

ファイルを呼び出すウィンドウに「ショートカット」が表示されます。Template実際にはtemplate。ちょうどあなたのコードを通過し、それを許可しない場合、あなたは大丈夫でしょうか?

  • すべてのファイル名が1つの場合、または1つの標準を使用していることを確認してください( '基本'ページだけの場合はすべて小文字にします。クラスはClassName.phpのような資格を持っていると言います)
  • あなたの呼び出しがその実際の名前を使用していることを確認してください。
  • ...
  • profit。

何らかの理由でそれを望まない場合は、いつでもクラスにautoloaderを使用できます。呼び出されるすべてのクラスは、それが見つからなければそのクラスをロードします。これは明らかに、クラスに含まれていないものを含める場合には理想的ではありません。

5

私はそのような状況にあった場合はまあ、私はラッパーを書くと思いますが含まれます:

function warned_include($file) 
{ 
    if(defined('DEBUG_ENV')) // define this somewhere else while in dev. 
    { 
     foreach(explode(PATH_SEPARATOR, get_include_path()) as $path) 
     { 
      // make sure the/is replaced with the OS native DIRECTORY_SEPARATOR 
      $fullPath = str_replace($path .DIRECTORY_SEPARATOR.$file, '/', DIRECTORY_SEPARATOR); 
      if(is_file($fullPath)) 
      { 
       $spl = new SplFileInfo($fullPath); 
       if($spl->getPathname() != $fullPath) 
       { 
        echo 'case sensitivity mismatch for ' . $spl->getPathname(); 
       } 
       break; 
      } 
     } 
    } 
    include $file; 
} 

を、私はそれをテストする機会がなかっましたが、SplFileInfoをはOSからのパス名を取得し、そのWindowsで大文字と小文字を区別する必要があることを意味します。

+0

+1努力のために:) – Sourav

1

すべてのインクルードをrequireと置き換える必要がありますか。そのようなファイルが存在しない場合は、致命的なエラーをスローします(適切な場合もありません)。

この情報は役に立ちます。 - http://clarityamidstchaos.wordpress.com/2008/10/24/how-to-perform-a-case-insensitive-file_exists-lookup-in-phplinux/

+0

私はまた、cwallenpooleメソッドをお勧めします。 + 1up – palaniraja

関連する問題