1
require_once 'Excel/reader.php';
$data = new Spreadsheet_Excel_Reader();

$data->read('Senator.xls');

error.log に次のエラーが表示されます

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)

奇妙なことに、これは私の開発インスタンスでは問題なく動作します。しかし、生産されていません。どのような違いを探す必要がありますか。

注:両方のenvにmemory_limit = 128Mがあります

4

2 に答える 2

2

おそらく 1 台のサーバーには 64 ビット プロセッサが搭載されています。GetInt4d ビット シフトは、64 ビット プロセッサでは機能しません。

このハックを使用して、32 ビット システムと 64 ビット システムで <<24 ブロックの正しい結果を確認します。GetInt4d 関数のコードを次のように置き換えてください: Location : Excel/olereader.inc line no-27 ,function GetInt4d()

$_or_24 = ord($data[$pos+3]);

if ($_or_24>=128) $_ord_24 = -abs((256-$_or_24) << 24); else $_ord_24 = ($_or_24&127) << 24;

return ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | $_ord_24;

于 2015-04-09T11:49:01.790 に答える