【问题标题】:Form taking too much time when a very long base64 string is posted发布很长的 base64 字符串时,表单花费了太多时间
【发布时间】:2013-09-11 08:53:18
【问题描述】:

我们的 PHP 脚本托管在基于 Linux 的 Apache 服务器上。我有一个带有一个 textarea 和一个 提交按钮 的表单。此 textarea 包含一个非常长的 base64 字符串,由 284312 个字符组成。

当我提交此表单时,它花费了太多时间。很长一段时间后它仍在处理中。它适用于小型 base64 字符串并且图像已成功发布,但不适用于大型图像 base64 字符串。

我在服务器端使用以下代码来获取这个 base64 图像:

$ifp = fopen( "images/myimage.png", "wb" );
$status = fwrite( $ifp, base64_decode( str_replace(' ', '+', $_REQUEST['image'] ) ) );
fclose( $ifp );

有什么解决办法吗?我应该更改我的 PHP 或 Apache 配置中的任何内容吗?

【问题讨论】:

  • 首先你说它很慢,然后它“不工作”。它是哪一个? “不工作”是什么意思?你为什么使用str_replace?这不是 POST 请求吗?
  • 不知道。它很慢或不工作..因为它在半小时后仍在处理。当base64 sring很长时最终没有结果
  • 为什么要使用 textarea 提交图片?
  • 这是我发布base64字符串的测试表格。实际上我将使用我的服务器从其他客户端获取以base64字符串形式发布的图像..
  • 刚刚在 PHP 5.4.4-14、webserver nginx 1.2.1、图像 5.6mb、base64 7489332 个字符上尝试了你的脚本,并且工作正常,没有问题。执行时间:0.099922895431519s。看起来你的 php 已经过时了?

标签: php string apache post base64


【解决方案1】:

在没有 $_REQUEST 的情况下尝试一下,我的完整脚本首先,这里的代码对我来说很好,如果它不适合你,那么提供关于 PHP/webserver/machine (os, cpu ..) 的完整信息: 但我认为这是关于将字符从你的文本区域传递到代码的问题,我没有很好地理解你是如何做到的,但下面的测试脚本给了我们答案:)

<?php
    $time_start = microtime(true); 

    $imagedata = file_get_contents('Cat2.jpg'); //5616998 bytes
    $base64 = base64_encode($imagedata);

    //echo strlen($base64); //7489332 characters

    $ifp = fopen('myimage.png', 'wb');
    $status = fwrite($ifp, base64_decode(str_replace(' ', '+', $base64)));
    fclose($ifp);

    echo 'Total execution time in seconds: ' . (microtime(true) - $time_start); //0.098897218704224 seconds
?>

更多以前在cmets上发过。

【讨论】:

  • 感谢您的回复。我在服务器上使用 PHP 5.3.3。我把这个微秒的东西放在我的代码中。但是我最终无法查看这个时间,因为它仍在工作并且没有响应。
  • 你尝试了整个 php 脚本吗?忘记您的 .NET 应用程序或您正在使用的任何东西,只需尝试将整个脚本直接指向图像文件,如果它卡住了,那么问题出在 PHP 设置/版本中。但我几乎有默认的 php 设置。
  • 好的。我在服务器上使用了您的代码,并且成功上传了相同的图像。我的回答是“以秒为单位的总执行时间:0.0044651031494141”
  • 这意味着问题在于发布该 base64 数据。 ??
  • 是的,你必须提供更多你的代码,确切地说你是如何使用它的,所以我可以测试它并找到解决方案,看起来它在 php 中不是问题,而不是你想要的做,但问题在于你是怎么做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 2020-07-23
  • 2013-07-11
  • 2014-01-13
  • 1970-01-01
相关资源
最近更新 更多