为什么我的php上传不起作用?

时间:2017-11-30 20:12:24

标签: php file-upload fwrite fsockopen

TL; DR:为什么重新上传上传的数据不起作用?

我'尝试将用户上传到我的文件的数据上传到另一台服务器。这意味着,我想发布我的帖子数据。

我想将一些数据上传到upload.php,然后将其发布到test.php(只输出原始发布数据)。由于节省了内存,我希望它能够在不生成post完整消息的情况下工作。因此我也不想使用卷曲。

test.php的

<?php
echo 'foo', file_get_contents('php://input'), 'bar';

upload.php的

<?php
//new line variable
$NL = "\r\n";

//open the posted data as a resource
$client_upload = fopen('php://input', 'r');
//open the connection to the other server
$server_upload = fsockopen('ssl://example.com', 443);

//write the http headers to the socket
fwrite($server_upload, 'POST /test.php HTTP/1.1' . $NL);
fwrite($server_upload, 'Host: example.com' . $NL);
fwrite($server_upload, 'Connection: close' . $NL);
//header/body divider
fwrite($server_upload, $NL);

//loop until client upload reached the end
while (!feof($client_upload)) {
    fwrite($server_upload, fread($client_upload, 1024));
}
//close the client upload resource - not needed anymore
fclose($client_upload);

//intitalize response variable
$response = '';
//loop until server upload reached the end
while (!feof($server_upload)) {
    $response .= fgets($server_upload, 1024);
}
//close the server upload resource - not needed anymore
fclose($server_upload);

//output the response
echo $response;

当我将{ "test": true }(来自Fiddler)发布到test.php文件时,会输出foo{ "test": true }bar

现在,当我尝试对upload.php执行相同操作时,我只是获取foobar(以及来自test.php的http标头),而不是上传的内容。

1 个答案:

答案 0 :(得分:1)

最后,我设法修复错误。显然,其他服务器(和我的)依赖于http标头output

正如你在我的回答中所看到的,我没有发送(也没有计算)这个标题。所以,当我最终计算并发送foreach ( $get_seller as $keys ) { $val_tex = $keys['total']; $sum = += $val_tex //or... $val_tex += $keys['total']; //depending on how you want to us val_tex } 标题时,一切正常。这是缺少的一行:

Content-Length

重新上载(上传的数据到我的服务器)不起作用,因为只要在Content-Length标题中指定了另一个服务器,它就会读取正文。因为我没有发送这个标题,所以它没有用。