分类 PHP 下的文章

[分享] 开源一个 PHP 框架 Awheel

项目地址: Awheel
当前版本: v1.5.0
PHP要求: >=5.4.0

介绍

基本功能: 路由/中间件/控制器/控制台/组件/配置加载/输入&输出.

框架最初是为了满足公司业务需求一步步造出来的, 但是从一开始就很独立的没有柔任何业务代码进去, 只保留了基本功能, 除此以外的功能全部需要自行扩展, 因为我觉得框架提供的功能越多学习和推广的成本就越高, 出现 Bug 的几率也就越高, 反倒不如都拆分成组件, 而且 Composer 那么好用, 扩展起来分分钟的事.

所以没有自带模板引擎, 需要使用组件功能自行扩展, 只需要继承并实现 Component 接口的 getAccessorregister 方法就可以使用, 目前我提供了 Smarty, Blade, SPA 三种模板扩展.

也没有自带 ORM 组件, 但是这里提供一个扩展 medoo-model 这是一个轻量级的数据库访问封装, 不管是名字还是功能我都非常喜欢?, 也可自行扩展 Eloquent ORMDoctrine ORM 稍后我会给出一个 Eloquent ORM的封装扩展给喜欢的人使用

- 阅读剩余部分 -

[记录]Nginx 指令 Map 应用场景之: 统一 PHP 开发环境

在统一开发环境上很多团队很多公司做过很多尝试, 比如统一使用一个集成包, 使用 vagrant 等.

大部分都是在 Windows 下开发, 但是很多优秀的扩展和特性不被 Windows 支持,
同时很多人对 *nix 操作不熟练, 并且 vagrant 有个问题(其实是 VirtualBox 的问题)就是文件锁, 有时会导致 svn 无法提交/更新.

这里尝试给出另外一个方案, 个人觉得可行性还是很大的.

本文记录的方案只是个预案, 还没在公司实际推行.
本文演示环境使用 Ubuntu Server 14.04 和 Windows7

思路

  1. 开发人员通过 Samba 共享代码
  2. 服务器分别挂载开发人员共享到服务器
  3. 服务器配置根据开发者 IP 使用不同的代码

- 阅读剩余部分 -

[原创] Yaf 使用 Eloquent ORM 做数据层

Yaf 默认是不提供数据层处理功能的, 需要自行扩展.

Eloquent ORMLaravel 的内置 ORM 功能非常强大, 而且已经独立成组建, 任何项目都可以选择使用它.

目前最新版是5.0.28, 主要版本是跟随 Laravel 更新的, 下一个版本是 5.1 LTS 版, 非常棒.

在进行集成前, 需要开启 Yaf 的 namespace, 确保 php.ini 有如下配置:

yaf.use_namespace=1

为了方便管理, 建议使用 Composer 管理扩展, 以下示例均使用 Composer.

安装 Eloquent ORM, 在项目根目录创建 composer.json, 内容如下:

{
    "require": {
        "illuminate/database": "5.0.*",
        "illuminate/events": "5.0.*",
        "symfony/debug": "2.6.*",
        "symfony/var-dumper": "2.6.*"
    }
}

然后运行 composer update 下载代码, 并在 index.php 引入 vendor 目录下的 autoload.php 速度不理想可尝试我共享的镜像 http://composer.fengqi.me.

<?php

// 程序启动时间
define('APP_START_TIME', microtime(true));

// 程序跟目录
define('ROOT_PATH', realpath(__DIR__.'/../'));

// 加载 Composer
require ROOT_PATH.'/vendor/autoload.php';

// 启动程序
$app  = new Yaf\Application(ROOT_PATH."/config/application.ini");
$app->bootstrap()->run();

配置数据库信息, application.ini 增加以下内容:

; database
database.driver     = mysql
database.host       = 127.0.0.1
database.database   = yaf
database.username   = root
database.password   = 123456
database.port       = 3306
database.charset    = utf8
database.collation  = utf8_unicode_ci
database.prefix     = ""

这里使用 MySQL 作为示例, Eloquent 支持 MySQL, Postgres, SQL Server, SQLite.

- 阅读剩余部分 -

[总结] Laravel 如何在预加载试控制返回的字段

参考链接:Get specific columns using “with()” function in Laravel Eloquent

Laravel 的预加载使用方式是:

Post::with('user', 'user.extend')->orderBy('id', 'DESC')->paginate(10, array('id', 'content'));

拿到用户和扩展信息太方便了,但是问题是返回的数据太多了,站在一个强迫症的角度简直无法容忍啊。

控制返回的字段有两种方法,一个是在 model 里定义关系时指定好字段,但是不太灵活,还一种是在 ->with() 这里做文章:

Post::with(array(
    'user' => function($query) { $query->select('id', 'name'); },
    'user.extend' => function($query) { $query->select('birth', 'intro'); },
))->paginate(10, array('id', 'content'));

就这样。
既然可以指定字段那还可以做一些别的什么呢???

[分享] 用 PHP 写了一个 Transmission 的 RSS 下载

项目地址: Transmission RSS

目前支持的有 CHD/CMCT/TTG/OPENCD, 其它 PT 我没有账号无法确定适配, 因为 XML 格式可能不一样.

使用方法:

git clone https://github.com/fengqi/transmission-rss.git transmission-rss
cd transmission-rss

修改下 rss.php 里的配置

$rssLink = ''; #点击 chd 里的 [RSS下载], 把订阅地址填进去
$server = 'http://127.0.0.1'; # 默认 127.0.0.1
$port = '9091'; # 默认 9091
$rpcPath = '/transmission/rpc'; # 默认 /transmission/rpc
$user = ''; # 用户名, 如果有设置, 填进去
$password = ''; # 密码, 如果有设置, 填进去

然后运行 php rss.php 测试 ok 就可以放到 cron 里运行了,

sudo crontab -e
写入以后内容
# Transmission RSS 下载
*/10 * * * * /opt/bin/php /opt/transmission-rss/rss.php

php 的路径(使用命令: which php 获取), 和 clone 的项目路径根据自己情况修改下.

其他资源: Transmission ADD-ONS

[转载]PHP设置Cookie的HTTPonly属性

原文链接: PHP设置Cookie的HTTPonly属性

PS: 直接转载, 有时间再整理下排版, 有点挤...

httponly是微软对cookie做的扩展。这个主要是解决用户的cookie可能被盗用的问题。
大家都知道,当我们去邮箱或者论坛登陆后,服务器会写一些cookie到我们的浏览器,当下次再访问其他页面时,由于浏览器回自动传递cookie,这样就实现了一次登陆就可以看到所有需要登陆后才能看到的内容。也就是说,实质上,所有的登陆状态这些都是建立在cookie上的!假设我们登陆后的cookie被人获得,那就会有暴露个人信息的危险!当然,想想,其他人怎么可以获得客户的cookie?那必然是有不怀好意的人的程序在浏览器里运行!如果是现在满天飞的流氓软件,那没有办法,httponly也不是用来解决这种情况的,它是用来解决浏览器里javascript访问cookie的问题。试想,一个flash程序在你的浏览器里运行,就可以获得你的cookie的!

IE6的SP1里就带了对httponly的支持,所以相对还说还是些安全性。

PHP中的设置
PHP5.2以上版本已支持HttpOnly参数的设置,同样也支持全局的HttpOnly的设置,在php.ini中
-----------------------------------------------------
session.cookie_httponly =
-----------------------------------------------------
设置其值为1或者TRUE,来开启全局的Cookie的HttpOnly属性,当然也支持在代码中来开启:
-----------------------------------------------------
// or session_set_cookie_params(0, NULL, NULL, NULL, TRUE);
?>
-----------------------------------------------------
Cookie操作函数setcookie函数和setrawcookie函数也专门添加了第7个参数来做为HttpOnly的选项,开启方法为:
-------------------------------------------------------
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
-------------------------------------------------------
对于PHP5.1以前版本以及PHP4版本的话,则需要通过header函数来变通下了:
-------------------------------------------------------------

-------------------------------------------------------------

[总结]Linux下安装php的pear和pecl

参考链接: Linux上安装php的pear

首先下载安装脚本, 使用curl下载, wget也可以, 如果没有这两个命令请自行安装:

cd /usr/local/php/bin/
curl -o go-pear.php http://pear.php.net/go-pear
curl -o go-pear.php http://pear.php.net/go-pear.phar # 如果你的php版本高于php5.3, 执行这条

安装:

php go-pear.php # 回车, 会提示选择安装的东西, 直接回车, 安装全部, 若后面有要选择y/n的, 输入y回车

- 阅读剩余部分 -