【问题标题】:PHP SOAP fread() dynamic POST sizePHP SOAP fread() 动态 POST 大小
【发布时间】:2009-09-10 13:59:57
【问题描述】:

希望读取 SOAP POST 的文件大小,有什么最佳做法吗?

$data = fopen('php://input','rb');
$content = fread($data,5000);

$dom = new DOMDocument();
$dom->loadXML($content);

希望 5000 是动态的,因为每个 SOAP POST 大小都会不同,或者这有关系吗?

使用 fread() 会很棒

【问题讨论】:

    标签: php soap post size fread


    【解决方案1】:

    嗯。如果你可以用“fread”阅读它,我认为你没有理由不能用“file_get_contents()”阅读完全相同的文本。我用了几次,记得我都试过了。

    就“fread”的最佳实践而言,您需要的是可以从 getallheaders() 获取的文件大小。

    所以,如果您仍然喜欢使用“fread”,这里是代码。

    $data = fopen('php://input','rb');
    $Headers = getallheaders();
    $CLength  = $Headers['Content-Length'];
    $content = fread($data,$CLength);
    
    $dom = new DOMDocument();
    $dom->loadXML($content);
    

    上面的代码是自我解释的,所以不需要进一步解释。请注意,如果长度为longer than 8192 bytes,内容将被剪裁。所以你最好检查读取长度,看看它是否被剪裁。 (不过,如果您使用 'file_get_contents()',则无需担心)。

    希望对你有帮助

    【讨论】:

    • 谢谢,我想这样就可以了 :) 干杯
    【解决方案2】:

    您可以尝试以下方法:

    $xml = file_get_contents('php://input')

    这将获取所有内容,无论数据的长度如何。

    【讨论】:

    • 我正在使用它,但我无法让它与 DOMDocument() 一起使用并加载 XML
    • 这很奇怪。我没有将它与 DOMDocument 一起使用,但我已将它与 SimpleXMLElement 一起使用,并且效果很好。
    • 我也尝试了 SimpleXML,但没有成功。我工作的代码只是想知道如何使大小动态而不是硬编码。感谢您的帮助
    • 可能是您的 fopen 包装器 (us3.php.net/manual/en/…) 被禁用。我不确定它是否会影响 php:// URL,但它可能会。
    猜你喜欢
    • 1970-01-01
    • 2019-05-14
    • 2012-09-03
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 2012-04-14
    相关资源
    最近更新 更多