如何通过GuzzleHttp组件下载远程文件并保存在本地?

回复

zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 1203 次浏览 • 2023-03-05 12:11 • 来自相关话题

PHP8.1的项目,用curl访问链接总是返回35号错误,怎么解决?

回复

zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 1291 次浏览 • 2023-03-02 17:00 • 来自相关话题

Nginx+PHP-FPM架构,结合PHP8.1搭建应用服务器时的一些总结和记录

zkbhj 发表了文章 • 0 个评论 • 1599 次浏览 • 2022-12-08 14:07 • 来自相关话题

最近在做一个项目,使用了PHP8.1语言版本,语言框架使用的是Yii2的最新版本,然后再搭建服务器环境和部署应用的过程中遇到了一些问题,现总结如下,给同样场景可能会遇到一些类似问题的你提供一些解决方案,既然已经踩过一遍坑了,方便大家,也方便后续回顾总结。
 
一、编译安装PHP8.1:
因为编译过程中基本上遇到问题的概率并不大,我的编译过程还算顺利,因为服务器上保留了以前其他人运行的项目。PHP的版本是7.2.3,所以就编译安装了PHP8.1到一个指定的地方,然后独立安装的PHP-FPM。尽量不影响以前的项目运行。
我的编译配置信息(注意要一行,不能存在换行符):./configure --prefix=/usr/local/php8.1 --with-config-file-path=/usr/local/php8.1/etc --with-curl --with-freetype --enable-gd --with-jpeg --with-gettext --with-kerberos --with-libdir=lib64 --with-libxml --with-mysqli --with-openssl --with-pdo-mysql --with-pdo-sqlite --with-pear --enable-sockets --with-mhash --with-ldap-sasl --with-xsl --with-zlib -with-bz2 --with-iconv --enable-fpm --enable-pdo --enable-bcmath --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-soap --enable-sockets --enable-sysvsem --enable-xml --enable-sysvsem --enable-cli --enable-opcache --enable-intl --enable-calendar --enable-static --enable-mysqlnd最终我把编译好的php-fpm文件复制到了我的PHP8.1目录下,并完成了配置启动。这会儿还一切看似顺利。
 
编译过程中遇到了一个问题是:
configure: error: iconv does not support errno
 优先参考网上的解决方案安装缺失的iconv,如果不行,在运行configure之前先运行:
export LDFLAGS="$LDFLAGS -liconv"参考官网bug讨论 https://bugs.php.net/bug.php?id=80585,在此对歪果友人诚挚的感谢。

二、部署应用:
搭建好之后,顺利启动PHP-FPM服务器,监听端口9000,然后再Nginx配置文件中,将请求信息直接给到9000端口来处理,这里就有一些“东西”要注意了,否则就遇到了下面的问题:
 
问题1:部署应用之后,请求失败,页面返回“File not Found”,然后查看Nginx的报错日志,显示信息是:2022/12/08 13:15:51 [error] 31547#0: *29582 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 119.116.237.75, server: web.*.com, request: "GET /site/user-agreement HTTP/2.0", upstream: "fastcgi://127.0.0.1:9000", host: "web*.*com"网上说中问题, 比如php-fpm的 运行group和user不对啦,应用目录权限不足啦,但我发现根本原因是在Nginx转发时,少了一个重要的配置信息。
由于我的yii2项目启用了 URLManage功能,为了让链接看起来更漂亮一些,所以需要在Nginx配置文件中加入下面的这个配置:if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}

所以,完整的转发配置应该是:location / {
fastcgi_pass 127.0.0.1:9000;
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}所以这块,大家应该注意一下,更改完,重新启动Nginx服务之后,项目正常启动了!
 
问题二、页面图标显示异常:
由于使用了第三方图标工具,打开F12工具之后,发现是静态资源服务器访问字体文件时显示跨域:Access to Font at “xxx” from origin “xxx” has been by CORS plicy:
No ‘Access-Control-Allow-Origin’header is present on the requested resource.
Origin “xxx” is therefore not allowed access.这时候,只需要在静态资源服务器的Nginx配置文件中增加下面的配置项即可:location ~* .(eot|ttf|woff|swoff2|svg|otf)$ {
add_header Access-Control-Allow-Origin [url]http://www.zkbhj.com;[/url] //只允许单域名或者 ‘*' 。不推荐 ‘*' ,会导致安全问题
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
} 查看全部
最近在做一个项目,使用了PHP8.1语言版本,语言框架使用的是Yii2的最新版本,然后再搭建服务器环境和部署应用的过程中遇到了一些问题,现总结如下,给同样场景可能会遇到一些类似问题的你提供一些解决方案,既然已经踩过一遍坑了,方便大家,也方便后续回顾总结。
 
一、编译安装PHP8.1:
因为编译过程中基本上遇到问题的概率并不大,我的编译过程还算顺利,因为服务器上保留了以前其他人运行的项目。PHP的版本是7.2.3,所以就编译安装了PHP8.1到一个指定的地方,然后独立安装的PHP-FPM。尽量不影响以前的项目运行。
我的编译配置信息(注意要一行,不能存在换行符):
./configure --prefix=/usr/local/php8.1 --with-config-file-path=/usr/local/php8.1/etc --with-curl --with-freetype --enable-gd --with-jpeg --with-gettext --with-kerberos --with-libdir=lib64 --with-libxml --with-mysqli --with-openssl --with-pdo-mysql --with-pdo-sqlite --with-pear --enable-sockets --with-mhash --with-ldap-sasl --with-xsl --with-zlib -with-bz2 --with-iconv --enable-fpm --enable-pdo --enable-bcmath  --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-soap --enable-sockets --enable-sysvsem --enable-xml --enable-sysvsem --enable-cli --enable-opcache --enable-intl --enable-calendar --enable-static --enable-mysqlnd
最终我把编译好的php-fpm文件复制到了我的PHP8.1目录下,并完成了配置启动。这会儿还一切看似顺利。
 
编译过程中遇到了一个问题是:
configure: error: iconv does not support errno

 优先参考网上的解决方案安装缺失的iconv,如果不行,在运行configure之前先运行:
export LDFLAGS="$LDFLAGS -liconv"
参考官网bug讨论 https://bugs.php.net/bug.php?id=80585,在此对歪果友人诚挚的感谢。

二、部署应用:
搭建好之后,顺利启动PHP-FPM服务器,监听端口9000,然后再Nginx配置文件中,将请求信息直接给到9000端口来处理,这里就有一些“东西”要注意了,否则就遇到了下面的问题:
 
问题1:部署应用之后,请求失败,页面返回“File not Found”,然后查看Nginx的报错日志,显示信息是:
2022/12/08 13:15:51 [error] 31547#0: *29582 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 119.116.237.75, server: web.*.com, request: "GET /site/user-agreement HTTP/2.0", upstream: "fastcgi://127.0.0.1:9000", host: "web*.*com"
网上说中问题, 比如php-fpm的 运行group和user不对啦,应用目录权限不足啦,但我发现根本原因是在Nginx转发时,少了一个重要的配置信息。
由于我的yii2项目启用了 URLManage功能,为了让链接看起来更漂亮一些,所以需要在Nginx配置文件中加入下面的这个配置:
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}

所以,完整的转发配置应该是:
location / {
fastcgi_pass 127.0.0.1:9000;
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
所以这块,大家应该注意一下,更改完,重新启动Nginx服务之后,项目正常启动了!
 
问题二、页面图标显示异常:
由于使用了第三方图标工具,打开F12工具之后,发现是静态资源服务器访问字体文件时显示跨域:
Access to Font at “xxx” from origin “xxx” has been by CORS plicy:
No ‘Access-Control-Allow-Origin’header is present on the requested resource.
Origin “xxx” is therefore not allowed access.
这时候,只需要在静态资源服务器的Nginx配置文件中增加下面的配置项即可:
location ~* .(eot|ttf|woff|swoff2|svg|otf)$ {
add_header Access-Control-Allow-Origin [url]http://www.zkbhj.com;[/url] //只允许单域名或者 ‘*' 。不推荐 ‘*' ,会导致安全问题
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
}

PHP如何获取当前脚本所在服务器的IP地址?

回复

zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 3148 次浏览 • 2021-08-05 22:01 • 来自相关话题

PHP项目如何实现快速的批量数据处理?

回复

zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 3075 次浏览 • 2021-01-31 17:02 • 来自相关话题

PHP中如何获取毫秒时间戳?

回复

zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 4246 次浏览 • 2021-01-20 17:19 • 来自相关话题

PHP如何实现json_encode时不把中文和反斜杠进行转义?

回复

zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 4672 次浏览 • 2020-07-07 10:08 • 来自相关话题

接口正常返回数据,但是状态码返回500,是什么原因?

回复

zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 7028 次浏览 • 2020-02-03 20:48 • 来自相关话题

PHP如何将一个字符串按多个字符分割?

回复

zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 4557 次浏览 • 2019-11-02 11:11 • 来自相关话题

怎么在Linux上用命令行执行PHP脚本?

回复

zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 4181 次浏览 • 2019-07-09 11:48 • 来自相关话题