在PHP中通过HTTP POST发送非常大的字符串

时间:2014-11-29 16:31:32

标签: php email http cakephp

我的服务器上有一个邮件地址,它接收电子邮件并将它们发送到php脚本 - piper.php然后,此脚本会解析电子邮件并正确地检索,发送主题和发送消息。完成后,我希望这个脚本将此信息发布到远程CakePHP网站,以存储在MySQL数据库中。除了发布部分,我完成了所有这些工作。

要发布,我使用cURL在this link给出的代码,但我有两个问题(代码仅供参考)

function curl_post_async($url, $params)
{
    foreach ($params as $key => &$val) {
      if (is_array($val)) $val = implode(‘,’, $val);
        $post_params[] = $key.’=’.urlencode($val);
    }
    $post_string = implode(‘&’, $post_params);

    $parts=parse_url($url);

    $fp = fsockopen($parts[‘host’], 
        isset($parts[‘port’])?$parts[‘port’]:80, 
        $errno, $errstr, 30);

    pete_assert(($fp!=0), "Couldn’t open a socket to ".$url." (".$errstr.")");

    $out = "POST ".$parts[‘path’]." HTTP/1.1\r\n";
    $out.= "Host: ".$parts[‘host’]."\r\n";
    $out.= "Content-Type: application/x-www-form-urlencoded\r\n";
    $out.= "Content-Length: ".strlen($post_string)."\r\n";
    $out.= "Connection: Close\r\n\r\n";
    if (isset($post_string)) $out.= $post_string;

    fwrite($fp, $out);
    fclose($fp);
}
  1. 代码使用URL编码 - 我担心这可能不起作用,例如,如果我的电子邮件在文本中超过1MB - 对可以通过URL编码发送的数据大小有限制吗?< / p>

  2. 有更好的方法吗?我应该建立一个PERL脚本来直接连接到远程MySQL数据库并写入吗?欢迎提出建议

1 个答案:

答案 0 :(得分:1)

这不是CURL。

  1. RFC 2616未指定任何邮寄长度要求。
  2. 服务器有自己的帖子限制(例如Apache:http://httpd.apache.org/docs/2.2/mod/core.html#LimitRequestBody)。而你的php实例可以有其他选项http://php.net/manual/en/ini.core.php#ini.post-max-size

    1. 您可以编写php(或perl,或python,或bash - 无所谓)脚本直接连接到mysql。但您必须从外部打开与数据库的连接。请记住,mysql也有限制:http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_allowed_packet
    2. 由您来决定该怎么做。两种方式似乎都是合法的。

相关问题