1.1 Let’s Start
初次创建
开篇的目的很简单,创建一个空的
PHP
项目(文件夹),里边写一个index.php
,输出一个Hello World!
即可。
Step1
:创建空文件夹start_php_framework
,内部再创建一个web
文件夹,再在web
文件夹下创建index.php
。编写index.php
,内容如下:
<?php
echo 'Hello World!';
编写完成后保存即可。
- 此处可能就有了第一个疑问:为什么
index.php
不是直接放置在start_php_framework
根目录下,而是创建了一个web
文件夹来放置它?我们的目标是构建一款框架(不是一个单文件的脚本)通常我们会构建单入口的框架,调用框架内其他文件是通过路由来实现的。如果把入口文件index.php
放置在根目录下,那么它就与静态资源(当然如果纯前后端分离,PHP
仅担任API
角色的话就可能没有静态资源)以及我们未来编写的其他文件夹平级了,那么其他的文件就有可能暴露在公网上,这样就有了安全隐患。所以将index.php
放置在web
目录内部,就可以巧妙地与其他文件分开,降低风险。
Step2
:部署项目。PHP
项目一般使用Apache
或者Nginx
来部署(Windows
服务器还可能使用IIS
),服务部署涉及的知识点先不做过多展开。此处我们以phpStudy 2018
为例,使用Apache
部署来描述下部署流程(有些开发者对此环节可能已经非常熟悉了,可以跳过):
- 打开
Apache
的vhost.conf
,添加一段如下配置:
<VirtualHost *:80>
ServerName zsc.spf.com
DocumentRoot D:\phpStudy\PHPTutorial\WWW\start_php_framework\web
ErrorLog "logs/spf/spf_error_log"
CustomLog "logs/spf/spf_access_log"common
<Directory "D:\phpStudy\PHPTutorial\WWW\start_php_framework\web">
Options +Indexes +FollowSymLinks +MultiViews
AllowOverride All
Order deny,allow
allow from all
</Directory>
</VirtualHost>
- 附一段
Nginx
的配置以供参考:
server
{
listen 80;
server_name zsc.spf.com;
index index.php index.html index.htm;
root D:/phpStudy/PHPTutorial/WWW/start_php_framework/web;
include enable-php.conf;
location / {
rewrite ^/index.php(.*)$ /index.php?s=$1 break;
if (!-e $request_filename)
{
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
location ~ \.php {
include fastcgi.conf;
include pathinfo.conf;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
}
location ~ /\.
{
deny all;
}
error_page 404 /404.html;
access_log /data/logs/spf/spf_access_log;
error_log /data/logs/spf/spf_error_log notice;
rewrite_log on;
}
- 在
D:\phpStudy\PHPTutorial\Apache\logs
文件夹下创建spf
文件夹,重启Apache
服务
- 编写
C:\Windows\System32\drivers\etc\hosts
文件,添加一行配置127.0.0.1 zsc.spf.com
(部分机器没有权限,可以将hosts
文件拷贝到桌面,编写后粘贴回去覆盖即可)
- 浏览器访问
http://zsc.spf.com/
,网页成功输出Hello World!
至此,第一步已经运行成功~
项目结构
此时的项目目录结构:
start_php_framework [框架根目录]
└─ web [框架入口]
└─ index.php [框架入口文件]