使用PHP处理HTTP POST

时间:2010-10-07 05:42:21

标签: php apache http post cgi

我挣扎了半天,得出的结论是无法完成。我丢弃了我的PHP脚本并在perl中重写了它,它从一开始就按照我希望的方式工作。不过,我想知道是否可以在PHP中正确完成这些简单的任务。 问题:我有任意长(大小和时间)文件上传(通过原始数据POST),我只需要将其保存到PHP文件。它与PHP协同工作的方式是它完全处理发布的数据,将其保存到文件然后开始执行我的脚本(我的文件上传持续30分钟)。即使我试图fopen(“php:/ stdin”或php://输入),它仍然以那种迟钝的方式工作。我真正需要的是能够按顺序处理传入的已发布数据。我试过:1)modphp,2)php-cgi,3)php-cli作为cgi可执行文件运行。虽然php-cgi意味着要使用cgi,但它仍然预处理发布的数据(以便$ _POST变得可用)并且不像常规momphp那样工作。 CLI版本作为cgi脚本运行并不起作用,因为它无法从php:// stdin或php://输入读取!无论我做了什么,没有什么对我有用,我得出的结论是用PHP做不到......或者它可以吗?

感谢

2 个答案:

答案 0 :(得分:0)

当然PHP可以做到。上载的文件存储在临时目录中,直到PHP脚本可以与它们交互。执行此操作所需的信息位于$_FILES数组中。

$field_name = 'file'; # from the HTML form control

$move_result = move_uploaded_file(
    $_FILES[$field_name]['tmp_name'],
    $real_destfile
);

if ($move_result) {
    print "successfully uploaded file (originally called '$_FILES[$field_name]['name']' to $real_destfile";
} else {
    print "failed to receive uploaded file.";
}

答案 1 :(得分:0)

听起来你想要传输数据。要做到这一点,你必须设置一个准备好将数据作为流重新传输的套接字..即替换apache web服务器。

您的问题不是语言,而是Web服务器。 Web服务器侦听端口80,然后执行它的操作。例如,将帖子数据写入文件,然后启动php脚本。

您可以像使用Pearl一样创建自定义端口程序。你也可以用PHP做同样的事情,并使用命令行驱动的php脚本,而不是一个嵌入在apache中的脚本,监听端口80。但PHP并不是最好的语言,我会建议使用Python。

HTTP通信附加了一个开销,或者更糟糕的协议对您有用,这可能会缩短您的上传时间。

如果上传时间过长,您可以使用AJAX方法进行上传,并在客户端应用程序仍处于活动状态时继续上传。客户端AJAX应用程序也可以将其分成块。