PHP利用CURL实现 http post 和 get

PHP利用CURL实现HTTP GET和HTTP POST,用于HTTP请求,具体代码如下:

<?php
//初始化
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');
//设置头文件的信息作为数据流输出,如果不想打印出http头,可以把这行去掉
curl_setopt($curl, CURLOPT_HEADER, 1);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//执行命令
$data = curl_exec($curl);
//关闭URL请求
curl_close($curl);
//显示获得的数据
print_r($data);

HTTP POST:

<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$notify_url);
curl_setopt($ch, CURLOPT_POST, 1);


//curl_setopt($ch, CURLOPT_POSTFIELDS, "postvar1=value1&postvar2=value2&postvar3=value3");

$notifyData = [];

// In real life you should use something like:
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($notifyData));

// Receive server response ...
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_exec($ch);

curl_close($ch);

// echo $server_output;

Debian12 安装 PHP8.3

当前 Debian12 官方源中带的 PHP 版本是8.2,而 PHP8.2 的 Active Support 到今年年底(31 Dec 2024),所以直接装8.3吧,可以用的时间长一点。

首先安装sury源

#!/bin/sh
# To add this repository please do:
if [ "$(whoami)" != "root" ]; then
    SUDO=sudo
fi
${SUDO} apt-get update
${SUDO} apt-get -y install lsb-release ca-certificates curl
${SUDO} curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
${SUDO} dpkg -i /tmp/debsuryorg-archive-keyring.deb
${SUDO} sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
${SUDO} apt-get update

注意,如果安装sury源时报错:

The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY B188E2B695BD4743

意思是系统缺少sury源的公钥。只要把公钥下载到系统就可以了,执行以下命令添加公钥:
wget -qO /etc/apt/trusted.gpg.d/sury-php.gpg https://packages.sury.org/php/apt.gpg
公钥添加完成后,执行apt update刷新包列表即可。

然后执行以下命令安装PHP8.3:

apt install -y php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-curl php8.3-xml php8.3-imagick php8.3-zip php8.3-gd php8.3-intl php8.3-bcmath

如果需要支持 Laravel 框架,那么最后一个 bcmath 扩展是必须的。


同理,如果要安装php8.4,那么安装命令就是:

apt install -y php8.4-fpm php8.4-mysql php8.4-mbstring php8.4-curl php8.4-xml php8.4-imagick php8.4-zip php8.4-gd php8.4-intl php8.4-bcmath

PHP 常用代码片断

记录了一些PHP常用的代码片段,方便查阅使用。

<?php
// 判断请求类型
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
}

//php 判断是否为 ajax 请求
if (isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_REQUESTED_WITH"]) == "xmlhttprequest") {
    // ajax 请求的处理方式 
} else {
    // 正常请求的处理方式 
}

// PHP设置页面编码:
header("Content-type:text/html; charset=utf-8");

header("Content-type:application/json;charset=utf-8");

// PHP获取当前时间:
date("Y-m-d H:i:s");

// PHP获取页面执行时间:
// 在脚本最后添加
echo microtime(TRUE) - $_SERVER['REQUEST_TIME_FLOAT'];

// PHP header跳转:
header("Location: http://www.baidu.com/");

// PHP清空所有session:
session_destroy();

// 获取昨天日期
date("Y-m-d", strtotime("-1 day"));

// 当前时间:
date('Y年m月d日 H点i分s秒', time());

 

 

安装PHP 8.3

apt install php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-curl php8.3-xml php8.3-imagick php8.3-zip php8.3-gd php8.3-intl php8.3-bcmath

对于Laravel 需要安装 apt install php8.3-bcmath

要把 php8.3-dom 换成 php8.3-xml

说明:需要通过sury源来安装

https://packages.sury.org/php/README.txt

#!/bin/sh# To add this repository please do:
if [ "$(whoami)" != "root" ]; then    SUDO=sudofi
${SUDO} apt-get update${SUDO} apt-get -y install lsb-release ca-certificates curl${SUDO} curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb${SUDO} dpkg -i /tmp/debsuryorg-archive-keyring.deb${SUDO} sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'${SUDO} apt-get update

或:

apt install apt-transport-httpscurl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpgsh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'apt update

https://wiki.crowncloud.net/?How_to_Install_PHP_8_3_on_Debian_11

PHP7.4 升级到 PHP8.1

由于 php7.4 马上结束维护了,所以把博客服务器 PHP 版本做了个升级,直接升级到当前的最新稳定版 PHP8.1。

升级,直接安装PHP8.1 即可。

PHP8.1 的安装命令如下:

apt install php8.1-fpm php8.1-mysql php8.1-mbstring php8.1-curl php8.1-xml php8.1-imagick php8.1-zip php8.1-gd php8.1-intl php8.1-bcmath

安装完成后,顺便开启了 PHP8.1 的 JIT,以提高性能,开启方法如下:

编辑 php.ini,在 opcache 配置部分添加加粗的两行:

[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1
opcache.jit=tracing
opcache.jit_buffer_size=50M

保存后记得重启 php8.1-fpm。

参考链接:https://stitcher.io/blog/php-8-jit-setup

Hello, Laravel

经过一周的紧张开发,又一个面向银行的内部系统总算完成了。这个系统本来打算是用 .NET 来做,但这段时间一直心心念念 Laravel 框架,就像所有趁手好用的工具一样,只要用过一次,就忘不掉她的好。

经过简单分析,发现这个系统其实并没有复杂的业务和计算,由于是内部系统,也不存在高并发的可能,所以,对于 Laravel 是适用的。本来 .NET 开发的系统已经完成了 70% ,花了一周不到的时间就用 Laravel 重写完成了,不得不感慨开发速度之快,同时开发体验拉满。

这么多年来,虽说 PHP 也在断断续续的用,但从没怎么把它当回事,一般的项目主要还是使用 .NET 来做。对于自由开发者来说,.NET 可谓是相当的万金油,既可以做桌面开发,也可以做 Web 开发,关键时刻还可以拿来写一写安卓移动应用。由于是静态编译型语言,性能基本够用,配合 SQL Server 数据库,基本没有做不了的项目。

但是,自从知道 Laravel 框架后,就在慢慢地在不断了解,越了解就越被她的优雅所打动,这里我也用了优雅这个词,因为实在没有想到更好的词能描述那种感觉。直到去年,尝试用她开发了一个小项目,由于当时对 Eloquent 了解还不够深入,甚至多对多、一对多这种关系的用法还不太清楚,就强行上了,结果也还行,顺顺利利的开发完成。

这次的项目开发,在彻底弄清了 Eloquent 之后,就果断切换到 Laravel 来开发,真的是太好用了,再也不用定义 ASP.NET 里面的那一堆堆的实体类,再也不再需要 AutoMapper,再也不用那蹩脚的表单验证,再也不用等待编译生成,等等好处无法一一言说。总之就是开发轻量了,保存即生效,刷新即可看效果,整个过程轻松加愉快,身心愉悦!

当然,Laravel 并不是完美的,并不适用于所有场景,比如高并发场景,计算密集、IO密集型应用,对于这些场景和应用,Laravel 不是不能做,而是不够好,性能不够高!当然,这不能怪 Laravel,这是 PHP 的问题,什么时候等 PHP 进化出高性能的运行模式,那 Laravel 就是完美的。

最后,程序语言、程序框架始终是工具,只有根据需求和场景选择合适的工具才是真理。

后记:该项目最终使用ASP.NET Core重新开发,重业务的项目还是要使用强类型语言,懂得都懂,不解释。

Debian 10 PHP 7.4编译安装imagick扩展

下载 imagick 源码,解压并进入目录

wget https://pecl.php.net/get/imagick-3.4.4.tgz
tar xf imagick-3.4.4.tgz
cd imagick-3.4.4

安装依赖

apt install -y libmagickcore-dev libmagickwand-dev autoconf

进入 imagick 代码目录后执行 phpize

/usr/local/php/php74/bin/phpize

配置

./configure --with-php-config=/usr/local/php/php74/bin/php-config --with-imagick=/usr/local/imagemagick

编译安装

make && make install

编译安装完成后会显示扩展模块编译到了哪个目录,记录下这个目录的路径,以便在 php.ini 中进行配置,我这里是 /usr/local/php/php74/lib/php/extensions/no-debug-non-zts-20190902/

配置 php.ini

extension_dir = "/usr/local/php/php74/lib/php/extensions/no-debug-non-zts-20190902/"
extension=imagick.so

保存并退出,重启 php-fpm 即可。

PHP-FPM和Nginx使用Unix Domain Socket通讯

第一步,创建 unix domain sock 文件

cd /run
mkdir php && cd $_
touch php7.4-fpm.sock
chown www-data:www-data php7.4-fpm.sock
chmod 777 ./php7.4-fpm.sock

第二步,配置 php-fpm

cd /usr/local/php/php74/etc/php-fpm.d
vi www.conf

listen = 127.0.0.1:9074 改为 listen = /run/php/php7.4-fpm.sock

保存后,执行systemctl restart php7.4-fpm重启 php-fpm 。

第三步,配置 nginx

fastcgi_pass 127.0.0.1:9074;改为fastcgi_pass unix:/run/php/php7.4-fpm.sock;

保存后,执行nginx -s reload使 nginx 配置生效。

PS. 可以把 Unix Domain Socket 文件放到 /dev/shm 下以提高性能。因为这个目录不在硬盘上,而是在内存里。

PS. 这么改完之后,一定记得所有用到这个 PHP-FPM 的站点,nginx 配置都要做如上修改,不然网站就访问不了了。