目录
file_get_contents这个php函数抓取数据常见错误解决方法
一、环境配置
1.安装PHP
(1)安装依赖
(centos)
yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel libzip-devel pcre-devel sqlite-devel
如果提示libmcrypt-devel找不到执行以下:
yum -y install epel-release
yum update
yum -y install libmcrypt-devel
安装re2c(re2c是一个将正则表达式转化成基于C语言标识的预处理器。 )
yum -y install git automake gcc+ gcc-c++ libtool git clone https://github.com/skvadrik/re2c.git re2c cd re2c mkdir -p m4 ./autogen.sh && ./configure --prefix=/usr && make make install re2c -v |
安装oniguruma(正则表达式)是一种模式匹配工具,它允许用户使用一定的规则来匹配字符串中的内容。
wget https://github.com/kkos/oniguruma/archive/v6.9.4.tar.gz -O oniguruma-6.9.4.tar.gz tar -zxf oniguruma-6.9.4.tar.gz cd oniguruma-6.9.4 ./autogen.sh && ./configure --prefix=/usr make && make install |
(2)下载安装包
(window)https://windows.php.net/downloads/releases/php-7.4.33-Win32-vc15-x64.zip
cd /home/app/soft/php
wget https://codeload.github.com/php/php-src/tar.gz/refs/tags/php-7.4.33
或
wget https://www.php.net/distributions/php-7.4.33.tar.gz(推荐)
解压&&进入目录
(3)配置
如果没有configure文件,生成configure文件
./buildconf 或者 autoconf
(初次配置)
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -enable-bcmath --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-opcache --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-pdo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gettext --enable-mbstring --with-iconv --with-mhash --with-openssl --enable-bcmath --enable-soap --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --with-curl --with-zlib --with-bz2 --with-readline --with-libxml -enable-gd --enable-xml --enable-mbregex --enable-ftp --with-xmlrpc --with-zip --without-pear --enable-session --with-jpeg --with-freetype
error:configure: error: Please reinstall readline - I cannot find readline.h
》 yum -y install readline-devel
(增加模块)
-方式1 重新编译
同初次配置
-方式2 新增扩展
cd {源码目录}/ext/curl phpize ./configure make clean make make install #修改php.ini 文件 添加扩展extension=openssl 如果修改了php.ini的ext路径需要将生产的so文件移动到此路径下! 如:修改了php.ini ext="/usr/local/php/ext" cp /usr/local/lib/php/extensions/no-debug-non-zts-20230831/mysqli.so /usr/local/php/ext/mysqli.so |
编译的时候已经加载的模块,不需要在php.ini中配置;
(4)编译安装
make && make install
make命令安装:
yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++
collect2: error: ld returned 1 exit status make: *** [sapi/cli/php] Error 1
vi Makefile
查找 EXTRA_LIBS = ... 在结尾加上-lcrypt -liconv、保存退出
然后make clean 再编译
找到之前的php7.3.3包下php.ini-production,到/usr/local/php/etc下,并改名为php.ini
命令为:
cp php.ini-production /usr/local/php/etc/php.ini
原包sapi/fpm/init.d.php-fpm 文件拷贝到系统配置 /etc/init.d 目录下并重命名为 php-fpm
命令为:
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
(5)添加 php-fpm 配置文件
将php安装目录下的 /usr/local/php/etc/php-fpm.conf.default 文件拷贝同目录下并重命名为 php-fpm.conf
命令为:
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
(6)添加 www.conf 配置文件
将php安装目录下的 /usr/local/php/etc/php-fpm.d/www.conf.default文件拷贝同目录下并重命名为 www.conf
命令为:
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
(7)添加php到环境变量
创建并打开文件php.sh
编辑文件 vim /etc/profile.d/php.sh
添加内容:export PATH=$PATH:/usr/local/php/bin/:/usr/local/php/sbin/
点击ESC 在最下边命令输入行中输入:wq保存退出
source /etc/profile.d/php.sh 使用该命令使系统环境变量生效
(8)启动php-fpm
/usr/local/php/sbin/php-fpm 或者service php-fpm start
启动的端口号默认为9000 (netstat -tnl 命令可以查看端口号)
如果要修改端口号:则编辑www.conf文件
vi etc/php-fpm.d/www.conf 将listen = 127.0.0.1:9000的9000改为需要的端口号就可以 重启php,关闭PHP为pkill php-fpm 启动为上边已经说过的命令再查看端口号已经发生了改变.
php-fpm启动用户默认nobody。可以修改www.conf文件,不可修改为root用户。
新增用户组和用户
groupadd www
useradd -g www wwww
user = www group = www #启动进程的帐户和组 |
(9)设置开机自启
修改系统配置目录下的 php-fpm 文件可执行权限
chmod +x /etc/init.d/php-fpm
> 将系统配置目录下的 `php-fpm` 添加到 `系统服务`
chkconfig --add php-fpm
> 设置 `php-fpm` `系统服务` 为开机启动
chkconfig php-fpm on
(10)安装扩展依赖
_① pdo_odbc
进入源码ext/pdo_odbc目录
phpize ./configure (报错。无unixODBC之类的,先安装再重新进入PHP源码目录) tar zxvf unixODBC-2.3.4.tar.gz ./configure --prefix=/usr/local/unixODBC --includedir=/usr/local/include --libdir=/usr/local/lib -bindir=/usr/local/bin --sysconfdir=/usr/local/etc make && make install |
_② redis
(Window)下载5.2.1版本的dll文件即可;
wget https://github.com/phpredis/phpredis/archive/4.3.0.tar.gz
解压&进入编译安装
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config #配置
make && make install
2.nginx配置
vim /usr/local/nginx/conf/nginx.conf
server{ listen 182; server_name 127.0.0.1; index index.php index.html index.htm default.php default.htm default.html; root /usr/local/php/www; add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options "nosniff"; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass 127.0.0.1:9001; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } } |
重启nginx;
新建/usr/local/php/www/phpinfo.php访问验证;
3.安装composer
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
【镜像设置】
-设置阿里镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
-设置中国镜像
composer config -g repo.packagist composer Packagist/Composer中国全量镜像
-官方镜像
composer config -g repo.packagist composer https://packagist.org
-国内镜像
composer config -g repo.packagist composer Packagist/Composer中国全量镜像
-腾讯云
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/
4.Laravel框架
1.部署Laravel项目
现在, 通过在终端运行以下命令来安装Laravel:
把下面的testPro 替换成你想要的。
composer create-project --prefer-dist laravel/laravel testPro 8.6.12 (指定版本)(success)
【OR】
composer create-project --prefer-dist laravel/laravel testPro
如果报PHP扩展错误,但实际已安装扩展.
1.更新镜像源:
composer config -g repo.packagist composer https://packagist.org
2.添加参数
composer create-project --prefer-dist --ignore-platform-reqs laravel/laravel testPro
3.直接下载安装包解压
http://laravel.p2hp.com/laravel10.28.0.zip
修改项目目录权限,是的php-fpm启动进程有权限使用!
访问:
http://10.1.2.100:182/testPro/public/index.php
2.Laravel Debugbar
给Laravel 项目安装调试工具
1、进入项目目录 ,执行一下命令:
composer require barryvdh/laravel-debugbar
2、在你的项目config/app.php页面中
providers数组中加入
Barryvdh\Debugbar\ServiceProvider::class,
在aliases 数组中加入
'Debugbar' => Barryvdh\Debugbar\Facade::class,
ok 调试模块安装完毕
3.安装Laravel-admin
(1)安装
进入Laravel项目目录;
首先确保安装好了laravel,并且数据库连接设置正确。
composer require encore/laravel-admin:1.*
然后运行下面的命令来发布资源:
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
在该命令会生成配置文件config/admin.php,可以在里面修改安装的地址、数据库连接、以及表名,建议都是用默认配置不修改。
然后运行下面的命令完成安装:
php artisan admin:install
(2)启动
nohup php artisan serve --host 0.0.0.0 >run.log &
必须用内置web服务启动!尚且不知如何直接使用nginx代理.
http://ip:8000/admin 即可访问!
默认账号:admin/admin
(3)创建控制器
php artisan admin:make UserController --model=App\\Models\\User
其他操作参考官网:
https://laravel-admin.org/docs/zh/1.x/quick-start
二、常见问题
PHP支持CURL
(windows)
1.extension=php_curl
2.copy libssh2.dll from C:\php into C:\apache\bin
3.copy libcrypto-*.dll and libssl-*.dll from C:\php into C:\apache\bin (if it doesn't exist)
file_get_contents这个php函数抓取数据常见错误解决方法
(windows有效):找到php.ini文件,修改如下:
1、找到extension=php_openssl.dll这一行,去掉前面的‘;’
2、找到allow_url_include = Off 这一行,将Off改为 On,然后重启服务器。
(linux下的PHP)
第一种:安装openssl模块,安装好了以后就可以访问了。
第二种:stream_context_create方法
以下代码允许你使用file_get_contents获取https页面内容:
$url= 'https://blog.csdn.net/qq_41606390';
$arrContextOptions=array(
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);
$content = file_get_contents($url, false, stream_context_create($arrContextOptions));
第三种:使用curl函数替换file_get_contents
function getSslPage($url) {
/* 执念、很无奈-CSDN博客 */
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);// 跳过证书检查
curl_setopt($ch, CURLOPT_HEADER, false);//获取Header
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
file_put_contents报错
请检查目录权限
新增pdo_mysql扩展报错
解决方法:在pdo_mysql文件夹下新建ext子文件夹,并把pdo_mysql文件夹的父文件夹下的mysqlnd复制到刚新建的文件夹下,再次运行。