2013-07-18 41 views
1

我在我的php類中使用PHPExcel生成一個xls文件。代碼完全在我的本地主機上工作,但在遠程服務器上顯示錯誤。PHPExcel在遠程服務器上顯示錯誤

錯誤是:

<br /> 
<b>Warning</b>: include(inc/classes/PHPExcel_Shared_String.class.php): failed to open stream: No such file or directory in <b>/home/example/../index.php</b> on line <b>13</b><br /> 
<br /> 
<b>Warning</b>: include(): Failed opening 'inc/classes/PHPExcel_Shared_String.class.php' for inclusion (include_path='.:/usr/share/pear:/home/example/../inc/classes/Classes/') in <b>/home/example/../index.php</b> on line <b>13</b><br /> 

我一直在尋找互聯網上找到了解決更新PHP版本並啓用一些PHP庫,但在已經更新了我的遠程服務器上。任何人都可以告訴我什麼可能是遠程服務器上的這些錯誤的原因?

我使用了一個index.php文件,其中我有一個默認的__autoloader()函數來加載所有.class文件和另一個名爲excelgenerate.php的文件,我在其中使用相同的自動加載器來加載該類文件。在這個文件中,我有一個函數,我使用PHPExcel代碼通過包含PHPExcel.php來生成excel文件。這是我遇到錯誤的流程。

+0

你有沒有設置包含路徑 –

回答

0

什麼是PHPExcel_Shared_String.class.php的完整文件路徑?

錯誤消息是說,在你index.php的第13行不能包含從這裏

/home/example/../inc/classes/PHPExcel_Shared_String.class.php 

文件,也可以在這裏找到該文件:

/home/example/../inc/classes/Classes/inc/classes/PHPExcel_Shared_String.class.php 
+0

但是相同的代碼在本地服務器上完美工作。這怎麼可能 ? –

+0

什麼是PHPExcel_Shared_String.class.php的完整文件路徑?路徑(或者你的'include_path'設置)可能不同。 – Jon

5

的PHPExcel文件不

PHPExcel_Shared_String.class.php 

PHPExcel/Shared/String.php 

看起來好像你可能有一個與該PHPExcel自動加載磁帶機發生衝突自動加載磁帶機:嘗試使用SPL_autoload_register()

編輯

從PHP文檔(開發者文檔的3.2節)

報價

PHPExcel實現了一個自動加載器或「延遲加載器」,這意味着沒有必要在PHPExcel中包含每個文件。只需要包含初始PHPExcel類文件,然後自動加載器將在需要時包含其他類文件,因此只有腳本實際需要的文件纔會加載到PHP內存中。這樣做的主要好處是它減少了PHPExcel本身的內存佔用量,因此它使用更少的PHP內存。

如果您自己的腳本已經定義了一個自動加載函數,那麼這可能會被PHPExcel自動加載函數覆蓋。例如,如果您有:

function __autoload($class) { 
    ... 
} 

而是執行此操作:

function myAutoload($class) { 
    ... 
} 
spl_autoload_register('myAutoload'); 

磁帶自動加載機將再用PHPExcel磁帶自動加載機並存。

+0

是的。我的索引文件中有一個自動加載器。但是相同的代碼在localhost上工作。爲什麼我不在本地服務器上收到任何錯誤? –

+0

我無法解釋你的服務器和localhost之間的區別;但我確實認識到一個自動加載器衝突 –

+0

同樣的錯誤:(我已經修改了我的問題根據流量。請檢查並糾正我如果我做錯了什麼。 –

0

問題是自動加載器可能會發生衝突。您需要檢查以確定您的自動加載器是否嘗試加載PHPExcel文件。在我的情況下就是這樣。

PHPExcel自動加載器做得很好,但我的自動加載器也進入了行爲,它失敗了。我放入代碼(從PHPExcel的自動加載器中竊取),以確保我的自動加載器只是試圖自動加載我的代碼。

因此,例如,在PHPExcel,自動裝卸始於:

if ((class_exists($pClassName,FALSE)) || (strpos($pClassName, 'PHPExcel') !== 0)) { 
    // Either already loaded, or not a PHPExcel class request 
    return FALSE; 
} 

如果你做同樣的事情(或檢查不PHPExcel),你會發現它工作正常。

0

我有同樣的問題,「無法打開'inc/classes/PHPExcel_Shared_String.class.php'」。它在本地運行良好(Mac),但在Linux上不能遠程運行。解決方案是用'PHPExcel'的大寫拼寫。我將它改爲'phpexcel',與php中的include相同。這產生了這個錯誤。

讓文件夾拼寫「PHPExcel」而不是「phpexcel」,包括它也與大寫字母在PHP

include_once 'PHPExcel/PHPExcel.php'; 

然後一切工作正常。

相關問題