一聚教程网-PHP入门教程02:PHP的安装与环境搭建
在了解了PHP的一些基本信息之后,首先要做的那么就是安装PHP,软件都没安装怎么学呢?在PHP中有一个黄金组合,它就是LAMP。
LAMP是什么:
L:linux
A:Apache
M:MySql
P:PHP
特点:开源免费、卡发成本低、开发速度快、开发周期短、执行速度灵活
说完这个之后下面开始为大家介绍PHP的搭建方法。
在以前我们搭建PHP环境的时候,需要分别安装Apache、MySql、PHP,安装起来非常的麻烦,而且安装完成之后还需要修改它们的配置文件、对文件进行关联等。
那么现在我们怎么去搭建PHP环境呢?
现在只需要安装一个PHPstudy就行了,它是一个集成好的环境,只要安装好PHPstudy之后,它就会默认为大家将上面提到的Apache、MySql、PHP进行安装,并且需要配置的地方都已经配置好了。
下面为大家介绍PHPstudy的下载地址和安装方法:
下载地址:
链接: https://pan.baidu.com/s/1i4COZfJ 密码: hfsr
安装方法:
1、解压
2、打开“PHPstudy”文件夹,双击PHPstudy2016.exe就能进行安装了;
问题:
线上运行的lamp服务器,默认yum安装的curl模块只支持http,不支持https。
解决方法:
编译安装curl,重新编译php,使php的curl模块支持https。
具体步骤:
1、下载curl
cd /usr/local/src #进入安装包存放目录
wget http://curl.haxx.se/download/curl-7.44.0.tar.gz #下载
2、安装curl
cd /usr/local/src
tar zxvf curl-7.44.0.tar.gz #解压
cd curl-7.44.0 #进入包安装目录
./configure --prefix=/usr/local/curl --with-gssapi --enable-tls-srp --with-libmetalink #配置
make #编译
make install #安装
3、重新编译php
查找系统之前的php编译参数
/usr/local/php/bin/php -i | grep configure #查看php编译参数
如下:
'./configure' '--prefix=/usr/local/php' '--with-config-file-path=/usr/local/php/etc' '--with-apxs2=/usr/local/apache/bin/apxs' '--with-mysql=/usr/local/mysql' '--with-mysqli=/usr/local/mysql/bin/mysql_config' '--with-mysql-sock=/tmp/mysql.sock' '--with-pdo-mysql=/usr/local/mysql' '--with-gd' '--with-png-dir=/usr/local/libpng' '--with-jpeg-dir=/usr/local/jpeg' '--with-freetype-dir=/usr/local/freetype' '--with-xpm-dir=/usr/' '--with-zlib-dir=/usr/local/zlib' '--with-t1lib=/usr/local/t1lib' '--with-iconv' '--enable-libxml' '--enable-xml' '--enable-bcmath' '--enable-shmop' '--enable-sysvsem' '--enable-inline-optimization' '--enable-mbregex' '--enable-mbstring' '--enable-ftp' '--enable-gd-native-ttf' '--with-openssl' '--enable-pcntl' '--enable-sockets' '--with-xmlrpc' '--enable-zip' '--enable-soap' '--without-pear' '--with-gettext' '--enable-session' '--with-mcrypt' '--with-curl ' '--enable-ctype'
对参数进行修改:
如下
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/tmp/mysql.sock --with-pdo-mysql=/usr/local/mysql --with-gd --with-png-dir=/usr/local/libpng --with-jpeg-dir=/usr/local/jpeg --with-freetype-dir=/usr/local/freetype --with-xpm-dir=/usr/ --with-zlib-dir=/usr/local/zlib --with-t1lib=/usr/local/t1lib --with-iconv --enable-libxml --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-mcrypt --with-curl=/usr/local/curl --enable-ctype
备注:修改部分
取消原来的--with-curl
替换为:--with-curl=/usr/local/curl
取消参数两边的单引号
其它不变
cd /usr/local/src/php #进入php安装包目录(注意php版本要和之前一样)
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/tmp/mysql.sock --with-pdo-mysql=/usr/local/mysql --with-gd --with-png-dir=/usr/local/libpng --with-jpeg-dir=/usr/local/jpeg --with-freetype-dir=/usr/local/freetype --with-xpm-dir=/usr/ --with-zlib-dir=/usr/local/zlib --with-t1lib=/usr/local/t1lib --with-iconv --enable-libxml --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-mcrypt --with-curl=/usr/local/curl --enable-ctype #配置
make #编译
make install #安装
4、重启apache使设置生效
service httpd restart #重启
故障解决!
5、测试
以下代码,保存为phpinfo.php
<?php
phpinfo();
?>
上传到网站目录,查找curl,如下图所示,说明安装成功!
至此,Linux下PHP安装curl扩展支持https教程完成!
扩展阅读:查看软件编译参数
查看nginx编译参数:/usr/local/nginx/sbin/nginx -V
查看apache编译参数:cat /usr/local/apache/build/config.nice
查看mysql编译参数:cat /usr/local/mysql/bin/mysqlbug | grep CONFIGURE_LINE
查看php编译参数:/usr/local/php/bin/php -i | grep configure
例子
代码如下: curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在
curl https请求代码
代码如下: <?php
/** curl 获取 https 请求
* @param String $url 请求的url
* @param Array $data 要?送的??
* @param Array $header 请求时发送的header
* @param int $timeout 超时时间,默认30s
*/
function curl_https($url, $data=array(), $header=array(), $timeout=30){
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
$response = curl_exec($ch);
if($error=curl_error($ch)){
die($error);
}
curl_close($ch);
return $response;
}
// 调用
$url = 'https://www.example.com/api/message.php';
$data = array('name'=>'fdipzone');
$header = array();
$response = curl_https($url, $data, $header, 5);
echo $response;
?>
更高级实用的代码
function curlPost($url, $data, $timeout = 30)
{
$ssl = substr($url, 0, 8) == "https://" ? TRUE : FALSE;
$ch = curl_init();
$opt = array(
CURLOPT_URL => $url,
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_POSTFIELDS => (array)$data,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_TIMEOUT => $timeout,
);
if ($ssl)
{
$opt[CURLOPT_SSL_VERIFYHOST] = 1;
$opt[CURLOPT_SSL_VERIFYPEER] = FALSE;
}
curl_setopt_array($ch, $opt);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$data = curlPost('https://www.111cn.net', array('p'=>'hello'));
echo ($data);
php内核编写的扩展有两个工作方式
(1). 编译为动态共享对象/可装载模块,也就是常见的 .so扩展,这种扩展可以在php的配置文件中方便的开启或者关闭
(2). 静态编译到php中,使用静态编译方法比较容易上手本文介绍方式
第一种方式:
编写或者下载扩展包
phpize
./configure
make
make install
配置php.ini中的.so文件
第二种方式:
第一步:编译安装php
1. ./configure –prefix=/opt/php56/ –enable-debug –enable-maintainer-zts
2. make
3. make install
4. make clean
这样一个新的php安装在了/opt/php56目录下
php.ini目录:/opt/php56/lib/php.ini
第二步:扩展准备工作
1. PHP在源码中提供了一个扩展骨架构造脚本: ext_skel,脚本放在/usr/local/php-5.6.25/ext目录下。它的使用方式如下:
./ext_skel –extname=mfs –proto=mfs.def
解释一下,–extname明显就是我们要创建的扩展的名称,–proto的proto是prototype的缩写,也就是扩展对外提供的函数原型,可以在这个文件中添加要导出的函数签名,每个函数做一行,这样ext_skel脚本可以自动创建它们的骨架代码。
2. 举个例子,字符串复制函数:
string self_concat(string str, int n)
把这一行保存为mfs.def文件,放在ext文件夹下。
第三步:基本骨架
1. 执行 第二步中的ext_skel命令
此时,/usr/local/php-5.6.25/ext目录下会生成mfs文件夹,并生成一些代码文件和配置文���,php扩展配置文件是/usr/local/php-5.6.25/ext/mfs/config.m4
我们需要打开16行和18行代码的注释,如图:
这样就可以重新生成configure文件可以使用enable-mfs静态编译扩展
第四步:重新生成configure文件,并编译安装php
php安装目录 /usr/local/php-5.6.25
1. ./buildconf –force
2../configure –enable-mfs –prefix=/opt/php56 –with-config-file-path=/opt/php56/lib/php.ini
3. make
4. make install
这样编译的php就带了mfs扩展,并且可以使用def文件中定义的原型函数,但是由于并没有编写函数的具体内容
可以使用/usr/local/php-5.6.25/ext/mfs/mfs.php 进行测试,如下图:
表明脚本已经编译到php了。
第五步:编写扩展函数内容
先看一下有ext_skel脚本自动生成的self_concat函数代码,在ext/mfs/mfs.c:76行
PHP_FUNCTION(self_concat){char *str = NULL;int argc = ZEND_NUM_ARGS();int str_len;long n;if (zend_parse_parameters(argc TSRMLS_CC, “sl”, &str, &str_len, &n) == FAILURE)return;php_error(E_WARNING, “self_concat: not yet implemented”);}
这些代码是一个导出函数的基本框架了。
使用PHPFUNCTION()宏来生成一个适合于Zend引擎的函数原型。其中比较重要的是 zend_parse_parameters 函数,用来获取函数传递的参数;该函数的原型是:
zend_parse_parameters(int num_args TSRMLS_DC, char *type_spec, …);
第一个参数是参数的个数,通常使用ZEND_NUM_ARGS()的返回值,TSRMLS_DC这个照写就可以了,第三个参数比较复杂是一个表示函数期望的参数类型的字符串,后面紧跟参数值的变量列表,这里有一个PHP的松散变量和动态类型推断到C语言类型的转换。
第三个参数根据一个参数类型对照表生成:
类型指定符 对应的C类型 描述
l long 符号整数
d double 浮点数
s char *, int 二进制字符串,长度
b zend_bool 逻辑型(1或0)
r zval * 资源(文件指针,数据库连接等)
a zval * 联合数组
o zval * 任何类型的对象
O zval * 指定类型的对象。需要提供目标对象的类类型
z zval * 无任何操作的zval
考虑上面代码的实例:
if (zend_parse_parameters(argc TSRMLS_CC, “sl”, &str, &str_len, &n) == FAILURE)return;
“sl”: 第一个字符s代表二进制字符串,它在后面的参数列表中对应两个值,一个 &str, 一个&strlen;第二个字符’l’(L的小写),表示整数类型参数对应 &n。
扩展中的字符串都是二进制字符串,即并不以\0作为字符串结束,而是使用一个str_len表示字符串长度,具体看_zval结构体。
下面的工作就是修改这个函数了。
完成第一个导出函数
将自动生成的函数更新为:
PHP_FUNCTION(self_concat)
{
char *str = NULL;
int argc = ZEND_NUM_ARGS();
int str_len;
long n;
char *result; /* Points to resulting string */
char *ptr; /* Points at the next location we want to copy to */
int result_length; /* Length of resulting string */
if (zend_parse_parameters(argc TSRMLS_CC, “sl”, &str, &str_len, &n) == FAILURE) {
return;
}
result_length = (str_len * n);
result = (char *) emalloc(result_length + 1);
ptr = result;
while (n–) {
memcpy(ptr, str, str_len);
ptr += str_len;
}
*ptr = ‘\0’;
RETURN_STRINGL(result, result_length, 0);
}
按���上面的方法,重新编译php,也就是第四步重新执行, 就可以在php文件中直接使用slef_concat()函数拼接字符串了。
成功输出拼接的字符串,OK!
MAMP Pro是一款适用于Mac操作系统的软件了,我们今天介绍过几篇在mamp上的安装配置了,但小编需要重新编辑安装mamp上的环境了,具体的如下
MAMP自带的PHP版本在编译的时候是没有加上--enable-debug选项的,于是我打算自己重新编译一下PHP方便自己在进行PHP扩展研究的时候可以用gdb来查看core dump文件。
首先使用MAMP中的php版本查看phpinfo()
得到了MAMP在编译时候的参数
--more--
并且在后面加上了--enable-debug选项
sudo './configure' '--with-mysql=mysqlnd' '--with-gd' '--with-jpeg-dir=/Applications/MAMP/Library' '--with-png-dir=/Applications/MAMP/Library' '--with-zlib' '--with-zlib-dir=/Applications/MAMP/Library' '--with-freetype-dir=/Applications/MAMP/Library' '--prefix=/Applications/MAMP/bin/php/php5.5.26' '--exec-prefix=/Applications/MAMP/bin/php/php5.5.26' '--sysconfdir=/Applications/MAMP/bin/php/php5.5.26/conf' '--with-config-file-path=/Applications/MAMP/bin/php/php5.5.26/conf' '--enable-ftp' '--enable-gd-native-ttf' '--with-bz2=/usr' '--with-ldap' '--with-mysqli=mysqlnd' '--with-t1lib=/Applications/MAMP/Library' '--enable-mbstring=all' '--with-curl=/Applications/MAMP/Library' '--enable-sockets' '--enable-bcmath' '--with-imap=shared,/Applications/MAMP/Library/lib/imap-2007f' '--enable-soap' '--with-kerberos' '--enable-calendar' '--with-pgsql=shared,/Applications/MAMP/Library/pg' '--enable-exif' '--with-libxml-dir=/usr/include' '--with-gettext=shared,/Applications/MAMP/Library' '--with-xsl=/Applications/MAMP/Library' '--with-pdo-mysql=mysqlnd' '--with-pdo-pgsql=shared,/Applications/MAMP/Library/pg' '--with-mcrypt=shared,/Applications/MAMP/Library' '--with-openssl' '--enable-zip' '--with-iconv=/Applications/MAMP/Library' '--enable-opcache' '--enable-cgi' '--enable-intl' '--with-icu-dir=/Applications/MAMP/Library' '--with-tidy=shared' '--enable-wddx' '--with-libexpat-dir=/Applications/MAMP/Library' --enable-debug
将重新下载的php对应版本新建了一个目录,解压在了以下的文件夹中
/Applications/MAMP/bin/php/php5.5.26/include/php
第一次使用上面的参数第一次编译报错:
configure: error: Cannot find OpenSSL's <evp.h>
用
brew link openssl --forece
再编译,又获得如下错误
configure: error: jpeglib.h not found
使用brew安装jpeglib
sudo brew install jpeglib
接下来又报错
configure: error: png.h not found
sudo brew install t1lib
报错
configure: error: Cannot locate header file libintl.h
用以下来解决
sudo brew install gettext
1) 安装 gettext:
brew install gettext
2) 编辑configure文件
将:
for i in $PHP_GETTEXT /usr/local /usr ; do
更改为:
for i in $PHP_GETTEXT /usr/local /usr /usr/local/opt/gettext; do
3)重新运行 ./configure
报错
configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information
安装
sudo brew install imap-uw
报错
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
安装
sudo brew install libmcrypt
报错
configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path
安装
sudo brew install PostgreSQL
之后
sudo make && sudo make install
会报错找不到libxml/parse.h
改成
/usr/include/libxml2
安装iconv
sudo brew install homebrew/dupes/libiconv
在修复libiconv报错的时候,网上一篇文章写移动/use/lib/目录底下的libiconv.*移动到其他目录,替换刚刚安装的libiconv来交叉编译,结果刚移动系统就崩溃了。这个库应该是系统很多程序调用的库, 花了一晚上重装了个系统,打算明天用docker来装个PHP环境。
相关文章
- 最常见的多环境配置,就是开发环境配置,和生产环境配置,本文主要介绍了vue项目多环境配置的实现,感兴趣的可以了解一下...2021-07-20
- 这篇文章主要给大家介绍的是关于Lua语言新手入门的简单教程,文中通过示例代码一步步介绍的非常详细,对各位新手们的入门提供了一个很方便的教程,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。...2020-06-30
- 一、下载Eclipse的PHP插件 百度搜索phpeclipse,看到某条结果是带有SourceForge.net字样的,点进去,找到Download按钮,点击之后,等待5秒就会开始下载了。二、安装Eclipse的PHP插件 插件下载完成之后,解压,然后把site.xml...2015-11-24
- 用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高...2013-09-27
mac下Apache + MySql + PHP搭建网站开发环境
首先为什不自己分别搭建Apache,PHP和MySql的环境呢?这样自己可以了解更多知识,说起来也更酷。可也许因为我懒吧,我是那种“既然有现成的,用就是了”的人。君子生非异也,善假于物也。两千年前的荀子就教导我们,要善于利用工具...2014-06-07- 这篇文章主要给大家介绍了关于VSCode配置C#运行环境的完整步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
如何设置process.env.NODE_ENV生产环境模式
process.env.NODE_ENV默认只有两种状态即development和production,本文主要介绍了process.env.NODE_ENV设置生产环境模式,感兴趣的可以了解一下...2021-09-14- 这篇文章主要给大家介绍了关于Nest.js环境变量配置与序列化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-21
Ubuntu 系统下安装Android开发环境 Android Studio 1.0 步骤
Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试,可以在Linux,Mac OS X,Window...2016-09-20- 这篇文章主要介绍了C#线程入门教程之单线程介绍,本文讲解了什么是进程、什么是线程、什么是多线程等内容,并给出了一个单线程代码示例,需要的朋友可以参考下...2020-06-25
VS Code C/C++环境配置教程(无法打开源文件“xxxxxx.h”或者检测到 #include 错误,请更新includePath)(POSIX API)
这篇文章主要介绍了VS Code C/C++环境配置教程(无法打开源文件“xxxxxx.h” 或者 检测到 #include 错误。请更新includePath) (POSIX API),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-13Windows配置VSCode+CMake+Ninja+Boost.Test的C++开发环境(教程详解)
这篇文章主要介绍了Windows配置VSCode+CMake+Ninja+Boost.Test的C++开发环境,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-05-12如何使用VSCode配置Rust开发环境(Rust新手教程)
这篇文章主要介绍了如何使用VSCode配置Rust开发环境(Rust新手教程),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-27- Visual Studio Code是一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性,这篇文章主要介绍了VSCode搭建C/C++编译环境,需要的朋友可以参考下...2020-05-15
- 这篇文章主要介绍了CocosCreator入门教程之用TS制作第一个游戏,对TypeScript感兴趣的同学,一定要看一下...2021-04-16
- 这篇文章主要介绍了vue cli3 实现分环境打包的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-12
- 这里主要讲到关于在php教程类的调用,申请明,使用以前各种类的实例方法与操作过程,让你清楚的知道php类的construct destruct clone call wake sleep用法。 简单购物车...2016-11-25
win7和win2008 r2下配置IIS7(ASP.net运行环境)
这篇文章主要介绍了win7和win2008 r2下配置IIS7(ASP.net运行环境) ,需要的朋友可以参考下...2016-01-27Fedora14 Linux系统安装Golang开发环境笔记
这篇文章主要介绍了Fedora14 Linux系统安装Golang开发环境笔记,本文讲解了2种安装方法,需要的朋友可以参考下...2020-05-01- 这篇文章主要介绍了前端自动化开发之Node.js环境搭建的相关资料,文中介绍的非常详细,对大家学习或者使用node.js具有一定的参考价值,需要的朋友们下面来一起看看吧。...2017-04-03