1.先查看一些基本信息
在Kali系统中,以下为常用的文件和目录的路径
第一、Kali自带了预置的可用的Apache2,和Nginx。
(有没有自带fpm我不知道,但可以通过apt-get 安装。)(要记住 php7.0-fpm 为 库的名。)第二、主站的目录。Kali预置的是统一定在/var/www/html下。(已经有了Apache2的index,和Nginx的index-nginx-debian.html。)(后续项目,我们可以在/var/www/html下新建子文件夹。)
第三、启动程序。可以找见的有两处(Apache2和Nginx都有两处)。分别在:
/etc/init.d 目录
与
/usr/sbin 目录这两处。
第四、
Apache2的配置文件,在: /etc/apache 文件夹里。
Nginx的配置文件,在: /etc/nginx 文件夹里。第五、PhpStorm与Apache、Nginx、PHP的绑定文件?
好像这个东西,此处已经不需要了。(找到了正确方法,不需要在Apache、Nginx、PHP的配置文件中绑定。)
2.Apache2 的基本配置
第一、Apache2的安装
已经安装。(系统已经自带,已安装。)
第二、Apache2的配置
采用默认配置。(其实——>默认配置的情况如下面显示。)
address : 【 localhost : 80 】
root : 【 /var/www/html 】(这里可以手动,更改到 /var/www/html 的子文件夹下面去。如 /var/www/html/my。)如果手动调的话,请注意以下的几处路径:
/etc/apache2下的:
apache2.conf
ports.conf
/sites-available/000-default.conf
/sites-available/default-ssl.conf
/sites-enabled/000-default.conf不知道是否都有用,但以上5个文件,都出现了相关字段(指 listen 和 root路径)
第三、Apache2 与 PhpStorm的绑定这一块,见后面的表述。(已经搞清楚了。)
第四、Apache2的启动
service apache2 start
service apache2 stop然后,打开
localhost:80
测试,成功运行与否。
3.PhpStorm与已有服务器的绑定
首先,你要弄清楚常见的误区
一、PhpStorm自带的内置浏览器,是有诸多BUG的。建议换成标准版的独立服务器(Apache2、Nginx皆可。)
同时,有一个原理你要弄清楚
一、Server的配置。简单链接了本地端口。(这就是PhpStorm使用Apache2的实质。)
二、服务器的configure填好,服务器的Service启动此时,服务器就正常启动,可以单独运行了。
暴露给PhpStorm,也是和PhpStorm唯一的联系。就是本地的端口,如localhost:80
。
Deployment(又名 部署、发布到服务器)(此处是PhpStorm与Server连接的重要功能)
Deployment
本质的含义就是:创建发布任务。
实质就是,方便的,把PhpStorm下的项目,本地拷贝,或者FTP上传,到Server所在的地址。
实质的实质,就是简单的,项目文件夹的自动复制。
(发布到本机 /var/www/html 文件夹下)
(规范管理)
(自动化管理)
(随时查看代码改动效果)
Deployment的设置和操作过程
在网络上,或者我的收藏夹,可以看见一个大概的操作步骤(虽然有些坑和讲的不清楚的地方)。
PhpStorm的Server选项,设置和操作过程
同样,在网上搜索相关文章,或者我的收藏夹,可以看见一个大致的可能有些小毛病的操作步骤。
(其实这块,PhpStorm的Server选项,好像可以简单的一两句话,大致上设定一下就好。)
(甚至于说,只有在PhpStrom里的 Alt + F2 快捷打开当前代码页的网页形式,才用到这个。)
PhpStorm的Deployment,在操作中出现,Mapping 或 Option 页面,无法设置Default Server的错误提示
其实可以这样去查看:
Opions ——
——Default server
——Deployment
这行文字 “use this server as default”其实,如果是灰色的(gray),
那么说明,当前 Deployment,已经是 default server 。(所以才无法再选中)。
是提示上的问题。
一些Deployment选项卡中,要注意的有特别含义的选项
Connection选项卡 ———— Folder选项 ———— 填Server的根地址 (如 /var/www/html )
Mapping选项卡 ———— Local path选项 ———— 填本地项目的路径 (如 /root/PhpstormProjects/TODO)
Mapping选项卡 ———— Deployment path选项 ———— 填Server的root地址之下的子文件夹,该文件夹是你希望本地项目上传后,所处的单独文件夹的地址 (如/my ,此处是相对路径,是拼接在 Folder选项的路径之后的。拼接完后,形如 /var/www/html/my )
Mapping选项卡 ———— Web path选项 ———— 此处填写一个相对路径。(如/my_path。)(作用是,当在PhpStorm里面, 用 Alt + F2 打开调试网页时,自动在基本的Folder,也就是已开启服务器的根地址后,自动补上这个 Web path。)(最后效果,比如在项目的home.php 文件上,用 Alt + F2 打开网页查看,此时在浏览器地址栏,自动填入的地址,为 localhost:80/my_path/home.php 。)
4.(一些BUG的产生)源于PhpStorm的自带内置服务器
比如下面这个问题:
初学javascript和jQuery,(信心不足的情况下)发现,用javascript写的jQuery的post请求:
jquery.post( url , data_array , callback_function )
竟然在F12 控制台的监控下,
出现 404 Not Found 错误。
蹊跷的是,当我手动把post指向的网址,(在仅post,而附带的数据为空数据的情况下),填入火狐浏览器中,敲下回车时,又可以正常的显示。(绕开了点击按钮,调用js的步骤。)
此时F12 控制台下,
显示的是 200 ,请求和返回成功。
这可愁坏我了,后来,经过排查,
才知道:1.导入 jquery.js 的这个步骤,没有问题。(原谅一个新手的多疑和谨慎。)
2. javascript 的写法,没有问题。
3. jquery.post 的写法和语法,没有问题。
4.原来最终的问题,
是在于PhpStorm自带的内置服务器的问题。
似乎网上的大意是说,所有的PhpStorm自带的内置服务器,对于所有的Post请求,都会出错误,诸如此次,出现的就是 404 的错误。
所以,此次
应该思考的
不是怎么修复PhpStorm的自带内置服务器
而是怎么让 Apache2 或者 Nginx 这样的正规服务器跑起来
。
5.穿插一些书写中的小细节
一、当使用js传递一个函数时,比如
jQuery.post( url , data_array , callback_function )中的 callback_function 时,
我们应该使用 不带括号的变量名(和function的函数名一致的名字) 来 指代那个函数的 对象(引用)。
二、图片<img>
标签的书写,
在本地项目上线后,应该写相对路径,比较好一点。
虽然在本地时,相对路径的写法一和绝对路径的写法二,都是OK的。(在本地项目时,故意用了两种不同的写法,来进行对比)当然,最好的写法,还是用一个基于 服务器路径的常量根路径,然后后面接上相对路径的写法。(这样本身形成了一个绝对路径,但比较好管理。而且绝对路径的读取,比起相对路径,要在效率上高上一些。)
三、javascript,在鼠标点击了按钮之后,跳转到我们指定的页面的写法
window.location.href = "abc.php"
话说javascript,这一点上,就很神奇啦
用方法,和用属性,在这里切换的是如此的宽容。
6.在对服务器路径(也可以是localhost)下文件目录进行操作时的一些命令
比如说,有时候,要对服务器路径的文件或文件夹进行,读写权限的修改,以让访客,拥有写入记录文件的一种权限
查看文件权限
$ ls -l 文件或文件夹路径 (这里全是 字母L 的小写, 是 list 列出 的意思)
修改文件权限$ chmod 777 文件
$ chmod 777 文件夹/*
(批量给予该文件夹下,所有的文件以 777 权限。)
有些时候,在PHP的api指令中,会出现 0777 的权限编号。- rwx r– r– 这个是Linux的权限组,后面的分别代表读取、写入、执行权限。而第一位的 -:“此处代表 文件。 (
-
默认表示 这是一个文件)
文件夹的标识是d
。(Directory 的意思)
字符设备文件的标识是c
。(Character 的意思)
块设备文件的标识是b
。(Block 的意思)
符号链接文件的标识是s
。(Symbol 的意思)
一些在调试PHP对于文件的操作时,绝妙的操作
打印并查看某目录下的所有文件(用PHP的指令)
scandir ( 某文件夹 如 "../" )
(作用:搜索该文件夹下的所有子文件和子文件夹,并形成一个字符串数组)$files = scandir ( "../" )
找到$files对应的所有文件或文件夹的路径的数组print.r($files)
(按照数据结构形式,打印出来)
另外,在PHP打开文件 fopen ( 文件 , 打开模式 )时,遇到的坑
append模式 和 append+模式 ,有时会打开失败
read模式 ,可以正常打开读取。
这个,还是只能归根结底,到 Linux下,文件的 rwx 权限上,去解决。
或者,每次在操作之前,手动用PHP的api,进行权限赋予操作:chmod( 文件 , 权限编号)
(赋予给文件权限, 如 权限编号为 0777 (全体可读可写可执行))
7.在实践中,对于服务器的文件和路径的文件权限的操作实践(localhost也可以)
要更改最后,登录网页可用的相关文件的权限,
你应该去 /var/www 下的文件夹里面,
进行修改。
光改本地项目的文件的读写执行权限,是没有用的。
以下,是一个小提示而已:
这里又涉及到一个,PhpStorm和Deployment,的控制下的,与服务器的根路径下的同步的问题。(稍后再谈, 大意是,本地的存储等的文件,不要干扰污染 服务器的根路径下的访客的文件。比如去除那个,自动remove服务器上有,而本地项目的最新情况下已经被删除的哪些文件,的这个选项。)
PHP,可以用代码,实时的修改文件权限:
chmod ( 文件 , 权限参数 )
PHP,这里产生了一个需求:
1.我需要先读取一个文本
2.然后按行输出
3.但这里要求,越新放进去的行数,应该越早输出,输出在最前面
4.而且,某些情况下,还只需要输出最新的前3行。也就是说,要考虑一个效率的问题。
PHP 数组——添加元素
array_push ( 数组对象 , 要放入的对象 )
PHP 数组——倒序重新排列
array_reserve( 数组对象 )
8.在用JavaScript在绘制Html页面时的细节
javascript
getElementsByName ( )
和
getElementById ( )
区别看上去很相似,
但javascript中,Name
和
Id是不同的。
html
这里面
Name = ” xxx ”
和
Id = ” xxx “
其实也是有区别的。前者是类似于Html的唯一编号的概念。后者是 CSS中的指定Style 和供javascript取到唯一的视图的概念。
在JavaScript当中,取到
<form> </form>
标签中的特定值
比如<form> </form>
中的某个<textarea>
内部的值,
应该采用 findElementById ( ) 这个方法。
在javascript中,不能直接写文件进本地。(因为javascript,是在浏览器中,运行的一种语言。类比于虚拟机。)
因此,要调用PHP的post请求。
(再调用PHP的接收 post 请求方法。$_POST['xxx']
)
javascript的,刷新当前页面
reload( boolean )
(此处,为true,代表强制刷新页面(效果和 Ctrl + F5 页面)。为false,代表普通刷新(可能会重新读取到缓存)。)
Deployment,可以设置,本地的忽略上传名单
用处是:有些本地的测试用的存储文件。或者其它的临时调试文件。可以避免上传到服务器的根路径下,避免产生干扰。
在Deployment的选项卡下,找到 Exclude Files 选项,然后添加进,不想上传到服务器的根路径的,文件或文件夹目录。
9.在开始调试Nginx时,遇到的问题
前提条件:对于Nginx的/etc/nginx目录下的ngixn.conf文件,进行了简单的配置————>指添加了一个基本的server,Server里设置了 listen 和 root。
此种情况下:
1.Nginx对于html的解析,是没有问题的。
2.Nginx对于php文件的打开和解析,出现了问题:描述:此时,当输入xxx.php这样的网址时,会出现提示————>” 是否下载文件 xxx.php ?”
原因:对.php文件进行解析,必须要走 FPM 或者 FastCGI 这种类的协议。
之后,就进行一次次调试:
1.Nginx的nginx.conf配置文件的设置 : user xxx 属性
发现了这样一条属性。
但不确定是干嘛的。
我的本地,好像是user www-data
。
网上也有user www www
的写法。
2.Nginx的nginx.conf配置文件的设置:打开 access日志 和 error日志
目标:打开日志开关。包含了 accees_log 访问日志 和 error_log 错误日志。
步骤:
1.找到nginx.conf文件下的,http { }标签。
2.在 http {}中,加入如下语句。
3.access_log = /var/www/nginx/access.log
(指定访问日志的路径。)
4.error_log = /var/www/nginx/error.log
(指定错误日志的路径。)
之后,可以在 /var/www/nginx 目录下,查看
访问日志
和错误日志
。
3.关于Nginx和PHP之间的FPM服务
1.这个问题,之前写下的记录,都是在摸索阶段。于是这里就不发表之前那些不成熟的言论了。成功的案例,在本文后面,有展示。
2.之前纠结与php-fpm
服务到底要不要运行?在何种情况下(Apache2? Nginx?)要运行?在何种模式下要运行( PHP 自带的FPM模式? Nginx自带的fastCGI模式?还有一个什么socket模式???)
现在,至少有这么几条,是明晰的:
1.Linux(Kali)里面,可能是因为自带内置PHP的版本是 v7.0 的原因,FPM服务改叫做
php7.0-fpm
。
2.如果用fastCGI模式,如果指定了 127.0.0.1:9000 却没有成功访问到 .php 结果的网址页面,那么原因就在于php7.0-fpm 服务没有运行
或者
FPM里面的配置,出现了错误
Kali中的关于FPM的程序文件,以及FPM的服务的一些问题
Kali中,会出现以下容易混淆的情况(都是因为PHP更新到了7.0引起的)
1.Kali中,fpm的相关的启动的程序文件,文件名有时叫
php7.0-fpm
,有时却叫php-fpm7.0
。
2.而Kali中,FPM相关的服务,在Command
中,却又叫php-fpm7.0
。()
$service php-fpm7.0 start
$service php-fpm7.0 stop
论Nginx(以及任何大型框架),打开log或日志的重要性
当发生任何错误时,从error_log入手,几乎是最精确的方式。
如果是常见问题,那么也就会极快的得到解决。
10.fastCGI调试时,遇到的一些坑
我曾经以为
fastCGI 的 127.0.0.1 : 9000
似乎和自己某些其它端口冲突其实并不是的。只是我一知半解之下,对于端口以及Apache2以及Nginx不熟悉,导致的错误的怀疑罢了。
此处涉及的一些其它,
ipV4
和
ipV6
的一些不同协议的问题
对于域名上的写法会不会有影响?似乎是有一些影响,但我不知道具体是什么样的
所以,这只是毫无理由的凭感觉的猜测
11.出现了一个很奇怪的问题,有人说
对 fastCGI 的,
每一次配置修改,
都要 重启 计算机才生效?
我希望不要是这样的。。。。。
因为那样子太麻烦了也许,……, Ctrl + F5 强制刷新,能够解决一些问题?
12.在设置一些Nginx有关于 fastCGI 的配置时,我发现了这样的情况
fastcgi_param REDIRCT_STATUS 200 ;
这行是写在
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi_params;
}
这样一行配置,能用不能用我不太知道
另外一行是 include fastcgi_params;
可以看出,
fastcgi-params
是类似于
PHP中的$_POST[ ' abc ']
这样的全局变量。
添加的方法是:
fastcgi_param XXX ;
通过这种方式,完成,向全局变量里,添加 key-value 对的操作。
那么,这里的
include fastcgi_params
,又是什么样的操作呢?仅仅是单纯的,导入进 已经经过添加、修改过的 系统变量组吗?
13.找到了一门,歪门邪道似的,解决【打开 .php 页面,反而提示“是否下载该文件”】,这一问题的临时的(和残缺的)解决方案
如果,仍然碰到 “提示下载文件”,这样的问题
那么可以尝试以下这招:修改 nginx.conf 根目录下的
default-type
将default-type
,从以前的application/octec-stream
修改变为
default-type text/html ;
这样可以临时性的解决问题。但是界面会错乱,很多功能也会不全。
14.高手出现啦,彻底的解决了问题!
第1步
先学两招
第一招:
$ tail -f error.log
(进入到error.log路径下,然后使用这个命令。可以实时查看 error.log 里的文本变化,和新信息。【实现:不断刷新效果】)
第二招:打开 /etc/php 文件夹,进入7.0目录下。
然后,打开fpm文件夹,打开其中的的php.conf文件。
这个就是我们要调的关键————>配置文件。
其它的什么 cgi、cli 都不是你想要的成功配置的文件夹。只有这个fpm文件夹才是。
第2步
感慨:高手一出手,果然不一样
感慨:php.conf 在调 nginx 时,果然是 php / 7.0 / fpm 下的 php.conf 这个配置文件(但要我早点想到,我是不会事后诸葛亮的)
第3步,进行最关键的调整
看清楚了
步骤如下
要调动的,
只有:fpm / pool.d
下面的www.conf
listen 由 /run/php/php7.0-fpm.sock
调配为
listen 127.0.0.1:9000 ;
同样, nginx.conf 下也配合上面那处,改为
http {
server{
location {
fastcgi_pass 127.0.0.1:9000 ;
}
}
}
然后就可以了
第3步
高手说:
其实 nginx里的
fastcgi_pass /run/php/php7.0-fpm.sock;
这种形式
对应另一边
文件夹 fpm/pool.d/www.conf
里的listen /run/php/php7.0-fpm.sock ;
这样一种模式,也是经典可用模式中的一种。
只是不知道,为什么在这台机器上,为什么用不出来?跑不出来?
第4步
我的感受如下:
胜利者领走一切,
失败者只剩下苦涩其实,
我的这条路,
估摸着,
走到
95%了
第5步
重新总结一下【Nginx + PHP】:
① 打开nginx 日志
② nginx.conf 里面添加 server { }
③ server 的 root 填好, listen 填好
④ server 的location ~ \.php$ { }
填好,且指向 127.0.0.1:9000
⑤ 文件夹 fpm/pool.d/www.conf 的listen ,添加 127.0.0.1:9000
⑥ 启动 nginx service
⑦ 启动 php7.0-fpm service
(另外, 文件夹 nginx/sites-enabled 下的 default 文件, 不知道要不要调设置。)