-1

非常に長い (10-15MB)xmlデータを投稿しようとしています。php.iniしたがって、開発中に次の設定を増やしました。

max_execution_time = 600
max_input_time = -1
memory_limit = 1024M
post_max_size = 5000M
upload_max_filesize = 5000M
default_socket_timeout = 600

しかし、php関数parse_strはまだクラッシュしているようです - 以下のすべてのコマンドが実行されず、ページ応答が 0 バイトであるためです。

私は実際にはPHPの第一人者ではありません。この問題を解決する方法を教えてもらえますか?

編集:ログも応答もありません。Apacheエラーログも何も文句を言っていません

parse_str を使用する理由 これは私のコードではありません:-)

EDIT2: CMS ツールを使用しており、いくつかのプラグインがあります。クエリ文字列を介して xml を送信することは、制限に対する回避策です。通常、XML は解析され、カスタム データベース (CMS データベースではない) に挿入されます。何が起こっているかを確認するために、いくつかのファイル プリントを挿入しました。

public function upsertItem($oXMLObjectFromExtern="")
{

    $bHasError = false;
    $iInserted = 0;
    $iUpdated = 0;
    $iErrors = 0;
    $output = "";

    $sPostData = file_get_contents("php://input");
    // works
    $fh = fopen('/var/log/apache2/kic.log', 'w');
    fwrite($fh, $sPostData);

    parse_str($sPostData, $aPostData);

    // does not do anything, no error messages nothing ... 
    $fh = fopen('/var/log/apache2/kic2.log', 'w');
    //fwrite($fh, "jetzt");
    fwrite($fh, var_export($aPostData,TRUE));

    if(!empty($aPostData['data']) OR is_object($oXMLObjectFromExtern)){

クエリ文字列は次のようにフォーマットされます: op=upsertitem&data=%3Crows%3E%0A%3Crow%3E%0A%3Cft_short_name%.... さらにエンコードされた xml データ

4

1 に答える 1

0

私は興味があり、これを見つけました:

php-internal メーリング リストに投稿する

どうやら str_parse はmax_input_varsini 設定をリミッターとして使用するようです...そのため、微調整が必​​要な別の設定になります。

なぜそのスクリプトがサイレントに失敗するのか、まだ完全には理解できません... すべてを表示するように error_reporting レベルを設定しようとしましたか (ini 設定が機能しない場合はerror_reporting(E_ALL)、スクリプトで試してください)?

サーバープロセスを監視して、実行がメモリ制限に達したか、CPU を使い果たしたかを確認しましたか?

ps ここで parse_str を使用するのはちょっとしたハックだと思います ;)

于 2013-04-03T13:47:07.393 に答える