将file_get_contents()
或stream_socket_client()
绑定到ip很容易,但是任何想法如何强制它使用所需的dns来解析域名?
例:
$f = stream_socket_client("ssl://example.com:443",$errno,$errstr,30,STREAM_CLIENT_CONNECT,stream_context_create(array('socket'=>array('bindto' => "192.168.1.1:0"),
但是如何强制它通过给定的DNS解析example.com
?
问题是我无法通过IP连接到SSL,因为它说CN无效且DNS服务器不可靠。虽然找到了解决方案。答案如下。
好的,我找到了解决问题的方法。我想我的问题不够明确,但问题是在使用IP连接到SSL服务器时使用CN
名称,因为我无法正确解析来自DNS的ip(系统中的DNS服务器经常失败)。
解决方案是在context
部分ssl
下添加到peer_name
:
<?php
stream_context_create(... 'ssl'=>array('peer_name' => 'example.com' ...)
?>
它应该从运行它的系统获取DNS,你能改变PHP服务器的本地DNS吗?
PHP
本身将使用其安装的服务器的DNS设置。由于php
没有服务器级访问权限,你必须使用你自己的bash / shell脚本并使用类似dig
或nslookup
来实现这一点(使用PHP的bash
或shell
函数调用exec()
/ shell_exec()
脚本。 - 或者那里有一些图书馆。一个受欢迎的图书馆是使用DNS2建造的pear
。
所以你的选择是:
bash
一起使用)shell
已安装。注意也可以通过在安装了exec
的机器的hosts文件中输入静态IP地址来模拟这一点。