PHP无法在文件内容超过1024个字符的情况下发布
我在使用PHP无法在文件内容超过1024个字符的情况下发布,php,limit,file-get-contents,Php,Limit,File Get Contents,我在使用file\u get\u contents()时遇到问题 我使用file\u get\u contents()将表单数据发布到远程脚本,这对短表单(即$postdata1024)时,则file\u get\u contents()与始终返回空字符串(非false)的远程脚本通信时出现问题 远程脚本没有任何问题,对于测试,我甚至修改了它,使其返回“OK”,但正如我在$postdata>1024中所说的那样,我得到的返回只是一个空字符串(远程脚本没有做它应该做的事情) 代码如下: $post
file\u get\u contents()
时遇到问题
我使用file\u get\u contents()
将表单数据发布到远程脚本,这对短表单(即$postdata<1024
)很有效,但是当我表单的内容超过那些1024
字符($postdata>1024
)时,则file\u get\u contents()
与始终返回空字符串(非false)的远程脚本通信时出现问题
远程脚本没有任何问题,对于测试,我甚至修改了它,使其返回“OK”,但正如我在$postdata>1024
中所说的那样,我得到的返回只是一个空字符串(远程脚本没有做它应该做的事情)
代码如下:
$postvals = array(
'from' => 'Test <test@test.com>',
'to' => 'test2@test.com,
'subject' => 'Test',
'body' => $mail_html_content
);
$postdata = http_build_query($postvals);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => array(
'Connection: close',
'Content-type: application/x-www-form-urlencoded',
'Content-Length: '.strlen($postdata),
'Custom-header: test'),
'content' => $postdata,
'timeout' => 40
)
);
$context = stream_context_create($opts);
$result = file_get_contents('http://test.com/script.php', false, $context, -1, 40000);
$postvals=数组(
'来自'=>'测试',
'到'=>'test2@test.com,
“主题”=>“测试”,
“正文”=>$mail\u html\u内容
);
$postdata=http\u build\u query($postvals);
$opts=array('http'=>
排列(
'方法'=>'发布',
'header'=>数组(
'连接:关闭',
'内容类型:application/x-www-form-urlencoded',
“内容长度:”.strlen($postdata),
“自定义标题:测试”),
“内容”=>$postdata,
“超时”=>40
)
);
$context=stream\u context\u create($opts);
$result=file\u get\u contents($result)http://test.com/script.php,假,$context,-1,40000);
顺便说一句,我的服务器post_max_size
设置为100M
服务器的phpinfo()
不报告任何1024
或1k值(除了log\u errors\u max\u len 1024
)
这个脚本哪里有问题?
(我不喜欢使用curl)我在我的服务器上用一个50Mb的文件测试了你的脚本,它运行起来有一些问题
我已将post_max_size设置为200Mb
我已将内存限制设置为-1(我有足够的内存)
请记住,您需要内存来打开文件,然后在http_build_query()中复制和编码该字符串。它占用了将近300Mb的内存,我认为一个100Mb的文件至少需要两倍的内存。另外,您需要在处理post的另一侧使用大致相同的量。嗯,你的另一面是同一台机器,所以共享相同的内存,我在这里想的是,你的内存已经用完了
您的'to'
键缺少尾随引号
同样,代码通常是有效的,因此请确保您有足够的RAM,如果可能的话,在另一台服务器上尝试。post\u max\u size
在您的服务器上是不相关的-寻找其他问题。它是同一台机器-我在不同的域上测试-因此我知道post\u max\u size就足够了;不幸的是,我已经在我能想到的所有地方寻找了问题,也在谷歌上搜索了类似的问题,但是没有运气:(所以我决定在这里问一个问题作为最后的解决办法。我相信问题可能在另一边。你能分享一些服务器端代码吗?var\u dump($\u POST)
也可能有帮助。检查接收端错误日志。对于测试远程脚本,注意到
,日志显示没有错误,对于$postdata>1024
我没有从远程脚本获得任何反馈,因此var\u dump($\u POST)
也没有:(对于$postdata<1024
我得到“确定”您的web服务器也限制了帖子大小。您是否检查了正在使用的任何httpd服务器的access.log和error.log?检查配置并将该限制更新为合适的值。感谢您的时间,我计划使用脚本发送1-10kb的帖子数据,这个巨大的帖子最大大小限制是由我的主机提供商设置的…在my d中我给了file\u get\u contents()
一个休息,用fsockopen()
试试运气,现在它工作得很好。尽管我仍然不知道为什么file\u get\u contents()
不喜欢大于1024个字符的数据