PHP没有';无法从JAVA应用程序接收文件
我无法修改的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
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);