4

以前は問題なく実行されていた CMS の一部として、Excel からのインポート スクリプトがあります。

私の共有ホスティング プロバイダーは最近、PHP を含むインフラストラクチャを 5.1 から 5.2.6 にアップグレードしました。スクリプトは「初期化されていない文字列オフセット: -XXX in /path/scriptname.php の 27 行目」を返します (XXX は、 512 および /path/scriptname.php はもちろん、問題のスクリプトへのフル パスです)。

Excel ファイルのすべての行に対してこのエラーが返されます。27 行目は、インポートされたデータが処理される最初のポイントである関数内からのリターンです。

function GetInt4d($data, $pos) {
        return ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | (ord($data[$pos+3]) << 24); 
}

最後に、「致命的なエラー: 133 行目の /path/scriptname.php で 47185920 バイトの許容メモリ サイズが使い果たされました (71 バイトを割り当てようとしました)」というメッセージが表示されます。

Apache エラー ログには有用なものはありません。私は困惑しています。少なくともどこを見ればいいのか、誰にもアイデアがありますか? それが私のスクリプト内の何かである可能性が高いのか、それともアップグレードと関係があるのか​​ を知ることさえ役に立ちます. 同じプロバイダーの別のサイトで、(アップグレード後) セッションを tmp ディレクトリに書き込めないという別の問題がありました (解決されたため) が、そうではないことは確かです (?)。

編集: パーサーのバージョンが PHP 5.2.6 と何らかの形で互換性がないことに答えがあったことが判明したので、問題のパーサーがSpreadsheet Excel Readerであることが誰かに役立つかもしれないと思いました。

4

3 に答える 3

3

ここで解決: http://www.phpbuilder.com/board/archive/index.php/t-10328608.html

于 2009-02-03T15:14:01.047 に答える
2

初期化されていない文字列オフセット:

...はそれ$dataが配列ではないことを意味します。

于 2008-10-09T23:50:45.300 に答える
1

ご意見をお寄せいただきありがとうございます。使用していた解析ライブラリの最新バージョンを見つけることで、状況は「解決しました」。私の推測では、この問題は php のバージョン間の違いに関係していると思われますが、正確にはわかりません。修正済みですが、イライラします。

編集:私は、純粋に質問を閉じるために、ティルの回答を受け入れるつもりです。入力のためにもう一度Thx。

于 2008-10-10T01:04:16.883 に答える