以前は問題なく実行されていた 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であることが誰かに役立つかもしれないと思いました。