1

PHP クラスで PHPExcel を使用して xls ファイルを生成しています。コードはローカルホストで完全に機能していますが、リモート サーバーでエラーが表示されます。

エラーは次のとおりです。

 <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ライブラリを有効にする解決策を見つけましたが、それはリモートサーバーで既に更新されています。リモートサーバーでこれらのエラーが発生する理由を教えてください。

すべての .class ファイルをロードするデフォルトの __autoloader() 関数がある index.php ファイルと、同じオートローダーを使用してそのクラス ファイルをロードする excelgenerate.php という名前の別のファイルを使用しています。このファイルには、PHPExcelコードを使用してPHPExcel.phpをインクルードしてExcelファイルを生成する機能があります。これは、エラーが発生するフローです。

4

4 に答える 4

5

PHPExcel ファイルは

PHPExcel_Shared_String.class.php

これは

PHPExcel/Shared/String.php

PHPExcel オートローダーと競合しているオートローダーがあるようです: SPL_autoload_register()を使用してみてください

編集

PHP ドキュメントからの引用 (開発者ドキュメントのセクション 3.2)

PHPExcel は、オートローダーまたは「レイジー ローダー」を実装しています。つまり、PHPExcel 内にすべてのファイルを含める必要はありません。最初の PHPExcel クラス ファイルをインクルードするだけでよく、オートローダーは必要に応じて他のクラス ファイルをインクルードするため、スクリプトで実際に必要なファイルのみが PHP メモリにロードされます。これの主な利点は、PHPExcel 自体のメモリ フットプリントが削減されるため、使用する PHP メモリが少なくなることです。

独自のスクリプトで既に autoload 関数が定義されている場合、これは PHPExcel の autoload 関数によって上書きされる可能性があります。たとえば、次の場合:

function __autoload($class) {
    ...
}

代わりにこれを行います:

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

その後、オートローダーは PHPExcel のオートローダーと共存します。

于 2013-07-18T10:13:49.890 に答える
0

問題は、オートローダーが競合する可能性があることです。オートローダーが PHPExcel ファイルを読み込もうとしているかどうかを確認する必要があります。私の状況ではそうでした。

PHPExcel オートローダは問題なく動作していましたが、MY オートローダも動作し始め、失敗していました。オートローダーが MY コードのみを自動ロードしようとしていることを確認するコード (PHPExcel のオートローダーから盗んだもの) を挿入しました。

たとえば、PHPExcel では、オートローダーは次のように始まります。

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

同様のことを行う (または PHPExcel ではないことを確認する) と、問題なく動作することがわかります。

于 2014-01-22T01:47:36.243 に答える
0

の完全なファイルパスは何PHPExcel_Shared_String.class.phpですか?

エラーメッセージは、あなたの13行目にindex.php、ここからファイルを含めることはできないと言っています

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

また、ここでファイルを見つけることもできません:

/home/example/../inc/classes/Classes/inc/classes/PHPExcel_Shared_String.class.php
于 2013-07-18T10:10:06.947 に答える