php - 我可以从特定 IP(如果机器有两个 IP)在 PHP 中打开套接字吗?

标签 php sockets phpmailer fsockopen

我正在使用 PHPMailer,它使用 fsockopen 访问 SMTP 服务器。

但是机器有两个不同反向DNS记录的IP。所以在电子邮件标题中我得到了以下内容:

Received: from one-server.tld (HELO another-server.tld) ...

我需要隐藏 one-server.tld 以支持 another-server.tld。但是我需要这两个 IP 及其当前的 RDNS 设置。

最佳答案

我认为使用 fsockopen 是不可能的。但在 curlfopenstream 函数中是可能的。你需要的是stream_socket_client()功能。

这里有一些实现它的方法。

  1. 使用可在 fopen 函数族和流函数族中使用的上下文参数。请参阅示例。

    $opts = array(
        'socket' => array(
            'bindto' => '192.168.0.100:0',
        ),
    );
    // create the context...
    $context = stream_context_create($opts);
    $contents = fopen('http://www.example.com', 'r', false, $context);
    

    还有 stream_socket_client

    $fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $opts);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        fwrite($fp, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
        while (!feof($fp)) {
            echo fgets($fp, 1024);
        }
        fclose($fp);
    }
    
  2. 使用 socket_bind . PHP.NET 得到了一个简单的例子 here .

关于php - 我可以从特定 IP(如果机器有两个 IP)在 PHP 中打开套接字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8967947/

相关文章:

PHP - 从每个子数组中获取特定元素而不循环

PHP 获取字符串中的 html 注释并包裹在 <pre> 标记中。正则表达式还是 DOM?

sockets - 如何使用 SBCL 的套接字重用之前打开的端口?

php - 隐藏或不打印来自服务器的消息

php - 如何在 PHPmailer 中显示所有选中的复选框

php - PHP 和 MySQL : Unable to search with more than a single keyword, 中的搜索引擎给出 PDOException 错误

java - 取消读操作

python - 使用Python在套接字上为ssh创建终端

php - 每次我的邮件在 phpmailer 中变成垃圾邮件

php - 用php连接mysql,在浏览器中查看