2011-06-25 86 views
3

我已经在Windows中构建了一个PHP项目,正如您在Windows中所知fun.php和Fun.php是相同的,但不是在Linux中。
Q1->由于我的项目将在Linux中运行如何解决这个问题[文件名错误]?
Q2->如果确切的文件名不存在,我需要显示一个错误!如何做?PHP的问题包括区分大小写的文件系统

我有template.php我想获得一个警告,这样我就可以解决这个问题[不中创设问题这2 PHP文件和render.php

include 'Template.php'; 

render.php
代码Windows,但在Linux]

+3

不要依赖大小写不敏感的文件名吗? –

+0

所有这些答案都很好,但是在花时间来问这个问题并实现其中一个答案的时候,你可能只是修复了你的文件名。 –

+1

对@ Rafe的评论...这似乎是一个坏习惯随便命名文件。如果是我(不管是谁造成的),我会清理它。修复文件名称,并传递函数/解决方法来撤销它,这无疑会创建一个新的注意事项来在这里发布问题。 :) – Dawson

回答

4

解决方案#1:全部使用小写字母。解决方案#2:每次使用完全相同的案例。当文件名称是“模板”时,不要试图包含“模板”,只需在第一个地方包含小写“模板”即可。大多数编程语言无论如何都是区分大小写的,所以最好进入实践。虽然文件名在这个问题上可能是唯一的,例如,PHP中的变量必须使用相同的大小写,所以只需将相同的主体应用于文件名。

1

你有一个'快捷方式'在窗口中,你调用一个文件Template,而它实际上是calles template。如果你只是通过你的代码而不允许这样做,你会没事的?

  • 确保所有的文件名都在一种情况下,或者使用一种标准(如果你只有'基本'页面,我会全部使用小写字母,但有时候在大型项目中你会有一个标准说类与资本一样ClassName.php)
  • 确保您的调用使用该实际名称。
  • ...
  • 利润。

如果由于某种原因你不想要这样,你总是可以使用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

相关问题