vphantom/pyritephp

PyritePHP

v1.2.25 2021-06-06 15:54 UTC

README

license GitHub release

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

特此授予任何获得本软件及其相关文档副本(“软件”)的人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向提供软件的人授予此类权利,但须遵守以下条件

上述版权声明和本许可声明应包含在软件的副本或主要部分中。

本软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定用途和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是在合同、侵权或其他行为中产生的,与软件或其使用或其他交易有关。