2012-09-19 66 views
6

我正在使用Silex進行項目工作。在一個特定的文件中,我添加了一個use語句讓自動加載器包含一個特定的php文件。稍後在文件中,我使用該類。開發服務器上的所有內容都很好,但是當我轉到生產時,我收到了一條Fatal error: Class not found消息。編輯:現在兩臺服務器都使用PHP 5.4.4。僅在生產服務器上發現類錯誤

是否有可能導致此問題的任何安裝特定問題?我可以確認由composer生成的兩個名稱空間自動載入文件是相同的。

只是爲了完整性考慮,這裏是包括聲明:

use Instaphp; 

這裏是在後面的代碼中使用的類:

$app['instaphp'] = $app->share(function() use ($app) { 
      if($app['tagframe.instagram_token'] === null) { 
       return Instaphp\Instaphp::Instance(); 
      } else { 
       return Instaphp\Instaphp::Instance($app['tagframe.instagram_token']); 
      } 
     }); 

     $app['instaphp.config'] = $app->share(function() use ($app) { 
      return Instaphp\Config::Instance(); 
     }); 

這裏是確切的錯誤:

Fatal error: Class 'Instaphp\Config' not found in /var/www/silexsandbox/src/TagFrame/Silex/TagFrameServiceProvider.php on line 89 

更新:我應該補充一點,我沒有遇到過這樣的錯誤在任何其他地方在相當l我正在研究的代碼庫,所以我知道它並不像所有命名空間都不起作用那麼簡單。

+0

聽起來很平凡,但是您確定在生產服務器上安裝了供應商(或在最新更改之後更新)? – Maerlyn

+0

您正在運行PHP-FPM嗎?也許啓用APC?你可以嘗試重新加載FPM工作人員嗎? – igorw

回答

5

默認情況下,Mac使用Journaled Case-Insensitive Filesystem。 Linux,取決於你的口味,主要區分大小寫。這肯定會導致你上面描述的行爲。

我建議你在Mac上創建第二個分區,並將其格式化爲日誌區分大小寫,以便與您的生產環境更接近。

+1

您確實可以在OSX上以區分大小寫模式格式化另一個分區,但它似乎不推薦用於您的操作系統分區,因爲某些應用程序將無法運行。例如:Photoshop https://helpx.adobe.com/creative-suite/kb/error-case-sensitive-drives-supported.html可能有其他分區像這樣想:) – GabLeRoux

4

感謝您的意見。我確實使用Composer進行了更新,以便自動加載器被轉儲。

這個問題(正如我在小時後發現的那樣)發現我使用的第三方庫(Instaphp)的目錄結構是小寫的。這並沒有給我的Mac帶來問題,但生產服務器運行的是Ubuntu,我認爲它使用了Mac不支持的區分大小寫的文件處理實用程序。

我完全支持自己在這上面過夜!

相關問題