vphantom / pyritephp
PyritePHP
Requires
- php: >=7.0
- ext-dom: *
- ext-mbstring: *
- ext-mcrypt: *
- ext-pdo_sqlite: *
- ext-readline: *
- ext-session: *
- gettext/gettext: ~4.2
- sphido/events: ^0.3.0
- twig/extensions: ~1.4
- twig/twig: ~2.1
- vphantom/email: ^1.0
Requires (Dev)
- ext-xdebug: ^2.0
- phpunit/phpunit: ^6.0
- satooshi/php-coveralls: ^1.0
README
PHP 5 和 Bootstrap 3 框架,用于启动多语言网络应用开发
简单的事件驱动框架,用于创建由 PDO 数据库支持、拥有 Twitter Bootstrap 用户界面的 PHP 5 应用。特别强调安全性
- SQL 查询使用占位符,当然,还有列名称的白名单;
- 用户密码以加密散列形式保存在数据库中;
- Twig 模板默认启用全局转义;
- 会话与浏览器的 IP 地址和指纹绑定,以降低被劫持的风险;
- 表单显示与当前会话绑定,以消除重复提交并进一步降低与 session 劫持和脚本攻击相关的风险;
- 新用户需要电子邮件确认才能激活;
- 电子邮件和密码更改需要重新输入密码并触发电子邮件通知;
- 注册和密码重置过程不会泄露是否已经注册了电子邮件;
- 覆盖 98% 的用户,表单在客户端进行验证,以提高响应速度。
只需将此存储库用作起点,修改此文件以及 modules/
和 templates/
中的内容以适应您的需求。其余的开发者文档可以在 开发者 中找到。
为什么名字叫 "Pyrite"?
实际上,这个框架是为了一个名为 "PyriteView" 的商业项目而构建的起点,作为一个双语的 "Peer Review" 玩笑。由于该框架高度通用,因此它被独立分叉。考虑到其起源,"PyritePHP" 这个名字是有意义的。
使用方法
从头开始手动
$ composer require vphantom/pyritephp
然后在您的 main PHP 文件中
<?php // Load dependencies provided by Composer require_once __DIR__ . '/vendor/autoload.php'; // Bootstrap Pyrite Pyrite::bootstrap(__DIR__); // Route request Pyrite::run(); // Shut down Pyrite::shutdown();
上述程序将只加载并触发一个事件,如果从 CLI 指定了该事件。例如,我们的示例应用程序的安装是通过以下命令启动的
$ php ./index.php --trigger install
从我们的示例应用程序自动启动
您可能想使用我们的 示例基本应用程序 作为功能齐全的起点,例如,如果您想创建 foo/
$ composer create-project vphantom/pyritephp-example foo
要求
- PHP 5.5 或更高版本
- PHP 扩展模块:mbstring、mcrypt、pdo_sqlite、readline
- SQLite 3
- 典型的 Linux 命令行工具:make、wget、gzip
- 当然需要一个 Web 服务器
Web 服务器配置
为了生成干净的、与技术无关的 URL,如 http://www.yourdomain.com/articles/127
,您需要告诉您的 Web 服务器将非现有文件的请求内部重定向到 /index.php
,它将在 PATH_INFO
中查找详细信息。我们还想防止访问私有文件。
以下是主要服务器软件的示例配置
Apache
RewriteEngine on
RewriteRule ^(bin|lib|modules|node_modules|templates|var|vendor) - [F,L,NC]
RewriteRule ^$ /index.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+) /index.php/$1 [L]
Nginx
location ~ /(bin|lib|modules|node_modules|templates|var|vendor) {
deny all;
return 404;
}
location ~ \.php$ {
# Usual FastCGI configuration
}
location / {
index index.html index.htm index.php;
try_files $uri $uri/ $uri/index.php /index.php;
}
Lighttpd
# TODO: Deny private directories
url.rewrite-if-not-file (
"^(.*)$" => "/index.php/$1"
"^/(.*)$" => "/index.php/$1"
)
配置
如果您使用了我们的示例应用程序,请编辑 config.ini
以更改任何默认设置并运行 make init
。这将自动下载并设置当前目录中 PHP 的最新版本 Composer 软件包管理器,然后使用它来下载本地运行时依赖项。最后,它将创建数据库表和管理员用户,以便您可以登录到您的全新安装。您将在命令行上提示输入用于无限制账户的电子邮件地址和密码。(注意:此提示需要 PHP 的 readline
,因此 它将在 Windows 上不起作用。)
您还需要确保您的Web服务器或PHP进程对存储数据库和各种其他文件的var/
目录具有读写权限。这不是由Makefile
完成的,因为它需要root权限并且需要知道您的Web服务器属于哪个组(通常是www-data
,但不总是如此)
mkdir var
chgrp www-data var
chmod 6770 var
cd var
mkdir sessions twig_cache
chmod 6770 sessions twig_cache
定时任务
使用与Web服务器相同的用户触发每日和每小时的事件
7 4 * * * /usr/bin/php /web/your_site/index.php --trigger daily 11 * * * * /usr/bin/php /web/your_site/index.php --trigger hourly
更新
虽然示例骨架不能升级,因为它只是您自己应用的简单起点,但其他所有内容都只需一个composer update
即可,如果您使用了示例应用,它将方便地在make update
中可用。
致谢
没有以下帮助,这个应用在合理的时间内不可能实现:
服务器端
- PHP语言
- SQLite数据库引擎
- Sphido Events库,以促进事件驱动设计
- Twig PHP模板库
- 100% PHP Gettext实现
客户端
框架
- jQuery 2(我遇到了版本3的性能问题)
- Twitter Bootstrap 3,包括其慷慨的Glyphicon许可
工具
- ParsleyJS用于客户端验证表单
- Selectize用于创建丰富的交互式表单输入
- Timeago用于显示可读的时间戳描述
构建工具
- Browserify
- Clean-CSS
- Uglify-JS
MIT许可
版权所有(c)2016-2020 Stephane Lavergne https://github.com/vphantom
特此授予任何获得本软件及其相关文档副本(“软件”)的人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向提供软件的人授予此类权利,但须遵守以下条件
上述版权声明和本许可声明应包含在软件的副本或主要部分中。
本软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定用途和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是在合同、侵权或其他行为中产生的,与软件或其使用或其他交易有关。