PHP没有';无法从JAVA应用程序接收文件

PHP没有';无法从JAVA应用程序接收文件,php,file-upload,Php,File Upload,我无法修改的Java应用程序正在通过POST请求向我的PHP脚本发送csv文件$\u POST和$\u文件为空 设置了最大文件大小5Mb,并且我的文件不会超过它 以下是Java应用程序请求的wireshark转储: 如何使用PHP接收文件? 以下是我的实际测试代码: $old_error_handler = set_error_handler('myErrorHandler'); set_exception_handler('myExceptionHandler'); file_putcon

我无法修改的Java应用程序正在通过
POST
请求向我的PHP脚本发送csv文件
$\u POST和
$\u文件
为空

设置了最大文件大小
5Mb
,并且我的文件不会超过它

以下是Java应用程序请求的wireshark转储:

如何使用PHP接收文件?

以下是我的实际测试代码:

$old_error_handler = set_error_handler('myErrorHandler');
set_exception_handler('myExceptionHandler');

file_putcontents(dirname(__FILE__).DIRECTORY_SEPARATOR.'post.txt',
    print_r(array_merge($_REQUEST, $_FILES), true));

$expectedAmountOfDataInBytes = $_SERVER['CONTENT_LENGTH'];
$contents = '';
while(0 < $expectedAmountOfDataInBytes--) {
    $contents .= fread( STDIN, 1 );
}

fclose(STDIN);

file_put_contents(dirname(__FILE__).DIRECTORY_SEPARATOR.'file.csv', $contents);


function myErrorHandler($errno, $errstr, $errfile, $errline) {
    file_put_contents(dirname(__FILE__).DIRECTORY_SEPARATOR.'error.txt',
        print_r(array(
            'date'  => date(DateTime::W3C),
            'no'    => $errno,
            'error' => $errstr,
            'file'  => $errfile,
            'line'  => $errline
        ), true), FILE_APPEND);
    die();
}

function myExceptionHandler(Exception $exception) {
    file_put_contents(dirname(__FILE__).DIRECTORY_SEPARATOR.'error.txt',
        print_r(array(
            'date'    => date(DateTime::W3C),
            'code'    => $exception->getCode(),
            'file'    => $exception->getFile(),
            'Line'    => $exception->getLine(),
            'Message' => $exception->getMessage(),
            'Trace'   => $exception->getTrace()
        ), true), FILE_APPEND);
    die();
}
file.csv
为空

Web服务器规格:

  • Apache/2.2.22
  • PHP 5.4.4-14

尝试打印
$\u文件
$\u POST
,如果两者都为空,则Java应用程序代码中存在问题,因为无论何时在PHP中获取文件,它都将位于
$\u文件
$\u POST
的任何键(base64编码或任何其他编码)。

或不起作用。现在PHP文档已经过时了。要使用它:
\http\Env::getRequestBody()
。看

最终有效的解决方案(PHP5.4):
Php.ini
中的Php配置:

enable_post_data_reading = 0
.htaccess

php_value enable_post_data_reading 0

PHP代码:

$write = fopen(dirname(__FILE__).DIRECTORY_SEPARATOR.'test.csv','w+');
$read = fopen('php://input','r');
stream_copy_to_stream($read,$write);

使用,您可以使用
php://input
带有
多部分/表单数据的请求。

第4部分回复:但是
$\u请求
包含
$\u获取
$\u发布
$\u COOKIE
。我独立测试,它们都是空的。我不明白为什么我看到的是wireshark而不是PHP中的数据。我认为这是PHP/Apache版本的问题,或者对于这些多部分/表单数据请求,PHP没有解决方案。
$write = fopen(dirname(__FILE__).DIRECTORY_SEPARATOR.'test.csv','w+');
$read = fopen('php://input','r');
stream_copy_to_stream($read,$write);