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个字符的数据