PHP本地环境两个项目互相访问CURL解决方案
1.为什么本地环境中不能直接互相访问
在解释这个问题之前,先了解请求的一个过程; 附上如下图:
当你使用域名localhost:80/kongzhiqi/jiekou
向本地服务器发起一次请求的时候,请求会从端口号80进入服务器,紧接着服务器会占用的CGI,默认占用CGI的端口为9000,主要目的是将动态语言php解析并与http分离,在解析php程序的时候发现程序含有curl发出请求,新的请求中默认也是占用CGI程序且为9000端口,而此刻CGI已经被这次请求所占用,所以程序中发出的curl请求根本无法执行,在整个请求过程中设置的keep-alive方式,所以服务器那边已经出现curl不能执行的问题,但是浏览器还一直傻傻等着,所以就会出现使用浏览器一直转圈圈、卡死或者返回false等情况;
所以从本质上讲,出现这个问题,就是因为CGI已经被占用中,又请求它所以导致出现等待或false的情况的,所以解决就是多启用一个CGI程序,并重新设置一个进入CGI的端口号;
2.开始解决这个问题
①第一步:打开这个你服务器的配置文件vhost (我这里是nginx)
修改前:
server {
listen 80; //这个地方是进入服务器的端口号80 不需要改这个端口号
server_name www.ci.com;
root "E:\TestSservice\CodeIgniter-3.1.11";
location / {
index index.html index.htm index.php;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;//这个是CGI 端口号 需要重新设置一个 比如90001等 任意就好
fastcgi_index index.php;
include fastcgi_params;
}
}
修改后
server {
listen 80;
server_name www.ci.com;
root "E:\TestSservice\CodeIgniter-3.1.11";
location / {
index index.html index.htm index.php;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9001;//将这个项目的要使用的CGI模块设置 90001端口号
fastcgi_index index.php;
include fastcgi_params;
}
}
注意事项:如果是phpstudy软件 需要重启一下
②第二步:打开配置的90001端口的CGI
到你安装的php的根目录下,找到你正在用的PHP文件夹,可以看到里面有cgi程序,如下图:
以命令行cmd的方式打开这个软件,不要双击,因为要定义这个cgi端口号:端口号就是上述文件定义的端口号;
指令为
php-cgi.exe -b 127.0.0.1:9001 -c php.ini
意思为:执行php-cig程序 并设置端口号为 127.0.0.1:90001 并执行php.ini文件
第三步:刷新浏览器再次访问,就可以看到结果了!