PHP

分类下相关文章

PHP 发送 HTTP 请求

在不使用三方库的情况下,例如 guzzle,PHP 发送 HTTP 请求。 方法一 curl $url = "https://api.domain.com/test"; $ch = curl_init(); $timeout = 10; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $rsp = curl_exec($ch); curl_close($ch ...

阅读全文...

PHP 分割字符串时指定多个分隔符

在使用 PHP Laravel 实现博客文章打多标签的功能,输入时标签以英文逗号为分隔符。 但是 PHP 的字符串分割函数 explode 只支持单个分隔符: $tags = explode(",", $tags_str); 这样做不能兼容中文逗号,因为在输入中文标签时很容易误输入中文逗号。 所以使用正则的方式来分割: >>> $tags_str = "php, Kotlin, 安卓, 网站"; => "php, Kotlin, 安卓, 网站" >>> preg_split( "/ ...

阅读全文...

PHP 获取请求的域名及协议

实在不想查看 ThinkPHP 的文档,所以就使用纯 PHP 的实现,获取请求的域名及协议。 function site_url() { $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; $domainName = $_SERVER['HTTP_HOST']; return $protocol . $domainName; ...

阅读全文...

重定向跳转引起的 PHP $_Post 和 php://input 数据为空

今天在 ThinkPHP 下测试获取 HTTP 请求 POST 数据时,发现无论怎么测试,都获取不到 POST 的数据。 $_POST 为空 php://input 也为空 但是在另外一台服务器上测试,却是正常可以获取到的。 查了半天没有找到问题,好不容易找到一个 Google 的结果,发现确实由于链接跳转引起的问题。 例如: 我测试时,是向 http://www.sunzhongwei.com/api 发送 POST 请求,而实际上 http 的请求会我设置的 nginx 自动重定向到 https 的链接 https://www.sunzhongwei.com/api。这种情况下,ph ...

阅读全文...

PHP 7.1 报错:Cannot use string offset as an array

有一段在 PHP 5 下运行正常的代码,放到了 PHP 7.1 环境下执行报错。 报错信息为: Cannot use string offset as an array 代码片段 $data = ‘’; foreach ($_POST as $k=>$v) { $data[$k]['id'] = $k; // 报错 $data[$k]['val'] = I("post.".$k); } 解决方法 将初始化的空字符串替换为 array。 $data = array(); 不明白为啥字符串还有这种谜一样的操作,而且 PHP5 居然还允许 。。。 ...

阅读全文...

ubuntu 18.04 安装 php 7.3

sudo apt update sudo apt-get install software-properties-common sudo add-apt-repository ppa:ondrej/php sudo apt update sudo apt install php7.3-fpm php7.3-mcrypt php7.3-cli php7.3-xml php7.3-mysql php7.3-gd php7.3-imagick php7.3-recode php7.3-tidy php7.3-xmlrpc php7.3-mbstring php7.3-curl 确认安装完成: # ...

阅读全文...

PHP 解析 URL 中的查询参数

举个例子,我想用 PHP 从一个给定的 URL 链接中提取查询参数 goods_id 的值。 实现方法 测试用的 PHP 版本:PHP 7.1.20 $product_link = "https://mobile.yangkeduo.com/goods1.html?goods_id=7717242955&page_from=23&share_uin=QXBIHIEFDSK7RH4TRIYMP4BW7E_GEXDA&refer_share_id=30a0099ec95f469e931800d00606d03e&refer_share_uid=403579 ...

阅读全文...

PHP 对象的浅复制(shallow copy)

上周遇到一个低级的 bug,半天没有找到问题所在,今天在蹲坑的时候,不知道为何脑子中想起了这个 bug, 然后突然意识到是否是因为没有进行对象 clone 造成的。 果然,问题就是因为在多次遍历同一个 laravel collection 时,反复对同一个对象的属性进行操作,导致后面的操作覆盖了之前的操作,所以在最终返回结果时,只保留了最后一次的操作结果。 浅复制(shallow copy) $copy_of_object = clone $object; 来做一个测试 <?php class City { public $name; } $c1 = new City; ...

阅读全文...

常用的 PHP 数值计算函数

对浮点数进行四舍五入 >>> $price = 100.8875; => 100.8875 >>> round($price, 2) // 保留两位小数 => 100.89 >>> round($price, 0) => 101.0 >>> $price = 100.1815; => 100.1815 >>> round($price, 2) // 保留两位小数 => 100.18 >>> round($price, 0) => 100. ...

阅读全文...

Malformed UTF-8 characters, possibly incorrectly encoded

PHP 后台调用三方的股票接口,在解析出股票名字后,要拼成 json 返回给前端时,报错 Malformed UTF-8 characters, possibly incorrectly encoded 第一次遇到这个错误,感觉比较新鲜。 我好奇的是,写了这么久 PHP 第一次遇到字符编码的问题,而用 Python 时,这种编码错误时不时的就会出现。 我用 chrome 看了一下这个接口返回头信息,编码是 GB18030。 Content-Type: application/javascript; charset=GB18030 编码转换方法: $rsp['data']['name' ...

阅读全文...

使用不同版本的 PHP 执行 composer install 命令

需求 我本地使用的是 php 7.1, 但是服务器上使用的是 php 7.0. 而我的服务器,本身性能问题。不方便在服务器上执行 composer install 命令。 所以只能将本地安装好的 vender 目录打包一并放到服务器上。 我需要本地能执行基于 php 7.0 生成 vender 目录下的依赖。 安装并管理多版本的 PHP 参考: https://www.tecmint.com/install-different-php-versions-in-ubuntu/ 开发机已按照的 PHP 版本: php -v PHP 7.1.20-1+ubuntu18.04.1+deb.sury.o ...

阅读全文...

centos 6 安装 php 7.1

查看 centos 系统版本号 cat /etc/redhat-release CentOS release 6.9 (Final) 安装 php 7.1 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm yum install mod_php71w php71w-opcache yum install php71w-cli php71w-mysql php71w-bcma ...

阅读全文...

php-fpm 配置文件检测

用过 Nginx 的兄弟都知道,修改 Nginx 配置文件之后,可以使用 nginx -t 来检测配置文件是否有语法错误。 今天配置 opcache 的时候,发现 php-fpm 也可以检测 php-fpm.conf , php.ini 等配置文件的正确与否。 sudo php-fpm7.0 -t [28-Dec-2018 08:57:02] NOTICE: configuration file /etc/php/7.0/fpm/php-fpm.conf test is successful sudo php-fpm7.0 -t Fri Dec 28 09:03:22 2018 (336 ...

阅读全文...

GuzzleHttp 请求设置超时时间

之前调用一个三方的 WEB API,大量的请求超时,导致 PHP 进程被占用完。整个网站一直报 504。 其中一个优化措施就是对三方 API 调用设置超时时间。 use GuzzleHttp\Client; $client = new Client(); $url = 'https://www.sunzhongwei.com'; try { $res = $client->request('GET', $url, ['timeout' => 1.5]); $res = $res->getBody(); } catch(\Throwable $ ...

阅读全文...

PHP 调用系统命令行,system() / exec()

system 与 exec 的区别 exec,可以指定 output 变量,且返回的结果是 array 结构。 >>> exec('ls', $output, $ret) => "some_file.txt" >>> $ret => 0 >>> $output => [ "app", "artisan", "bootstrap", "composer.json", "composer.lock", ] ...

阅读全文...

近期节日

2020年04月07日 世界卫生日
2020年04月11日 世界帕金森病日
2020年04月19日 谷雨
2020年04月21日 复活节
2020年04月22日 世界地球日
2020年04月23日 世界读书日
2020年04月26日 知识产权日
2020年04月30日 佛诞
2020年04月30日 全国交通安全反思日
2020年05月01日 国际劳动节
2020年05月04日 五四青年节
2020年05月05日 立夏
查看更多节日