将yii-bootstrap 添加到Yii框架中

Bootstrap 是神马东西,不用在这里描述了。安装的过程中按照官方的方式进行。

第一步:首先下载扩展包解压至protected\extensions目录形成bootstrap文件夹

第二步:在配置文件中配置:

 

Yii::setPathOfAlias('bootstrap', dirname(__FILE__).'/../extensions/bootstrap');
 
return array(
    'modules'=>array(
        'gii'=>array(
            'generatorPaths'=>array(
                'bootstrap.gii',
            ),
        ),
    ),
    'components'=>array(
        'bootstrap'=>array(
            'class'=>'bootstrap.components.Bootstrap', //执行Bootstrap.php文件
        ),
    ),

第三步

<?php Yii::app()->bootstrap->register(); ?>

将该段代码载入到页面模板中。

到这里,应该就可以正常运作了

Yii bootstrap

如果遇到以下问题

Alias “bootstrap.components.Bootstrap” is invalid. Make sure it points to an existing PHP file and the file is readable.

解决方法,将bootstrap目录的权限,修改为755

删除Mac 系统 中右键菜单重复的打开方式

系统永久了,安装新版本软件等,右键菜单中就多出了很多重复的打开选项。折腾了半天最终GG到了解决办法

Terminal中执行:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user

完美解决。上图

 

Sublime Text 2 增加php 运行方式

PHP Build System to Sublime Text 2

打开Sublime Text 2

选择: “Tools > Build System > New Build System…”  创建新的Build System

在打开的窗口中可以看到

{
    "cmd": ["make"]
}

将其修改为

{
    "cmd": ["/usr/bin/php", "$file"]
}

在MACOS 下PHP的路径为/usr/bin/php ,请寻找对应的系统路径进行更改。

保存,这个必须保存在sublime text 的user 目录中。

重启软件,Command + B

 

OK PASS

 

nginx upload 上传大文件

先上图
使用PHP 上传文件,无论是通过flash 还是相关的插件,对资源的消耗都是非常可怕。
在虚拟机环境下实测一个500M的文件,一个上传进程,系统的Load 1.5。
通过nginx upload 第三方模块文件上传,这样可以减少php对资源的消耗。
在虚拟机环境下实测一个500M的文件,一个上传进程,系统的Load 0.3 基本忽略不计。具体的效率如何,还需要在实际的生产环境中去验证。
以下是该模块的使用, 搭建好环境后,配合Uploadify 即可满足大大大文件的上传

nginx
nginx upload 模块
编译nginx 模块
tar zxvf nginx-1.2.2.tar.gz
tar zxvf nginx_upload_module-2.2.0.tar.gz
cd nginx-1.2.2
./configure –user=www –group=www –prefix=/usr/local/webserver/nginx –with-http_stub_status_module –with-http_ssl_module –add-module=../nginx_upload_module-2.2.0/
make && make install
编译完成后killall nginx
重新启动NGINX 模块即可生效
NGINX 配置

location /upload {
# Pass altered request body to this location
upload_pass /up/uploadify.php; # 转发到指定的后台程序进行处理,根据实际程序需要修改
# Store files to this directory
# The directory is hashed, subdirectories 0 1 2 3 4 5 6 7 8 9 should exist
upload_store /home/temp/uploads;

# Allow uploaded files to be read only by user
upload_store_access user:r;
# 限制上传速度,实际生成环境可放宽到更高。
upload_limit_rate 128k;

# Set specified fields in request body
upload_set_form_field “${upload_field_name}_name” $upload_file_name;
upload_set_form_field “${upload_field_name}_content_type” $upload_content_type;
upload_set_form_field “${upload_field_name}_path” $upload_tmp_path;

# Inform backend about hash and size of a file
upload_aggregate_form_field “${upload_field_name}_md5” $upload_file_md5;
upload_aggregate_form_field “${upload_field_name}_size” $upload_file_size;

upload_pass_form_field “^submit$|^description$”;
}

 

后端PHP 接收参数
<?php
echo “REQUEST :”;
echo “Upload: ” . $_REQUEST[“file_name”] . “”;     // 上传文件名 xxxx.jpg
echo “Type: ” . $_REQUEST[“file_content_type”] . “”; // 文件类型 image/jpg
echo “path: ” . $_REQUEST[“file_path”] . “”; // 文件路径 /tmp/000000
echo “MD5 ” . $_REQUEST[“file_md5”] . “”; // 文件MD5值 xxxxxxxxxxxxxxxx
echo “Size: ” . ($_REQUEST[“file_size”] / 1024) . “”; // 文件大小  123KB
echo “_POST:”;
echo “Name : ” . $_POST[“file_name”] . “”;
echo “Type : ” . $_POST[“file_content_type”] . “”;
echo “Path : ” . $_POST[“file_path”] . “”;
echo “MD5  : ” . $_POST[“file_md5”] . “”;
echo “Size : ” . ($_POST[“file_size”] / 1024) .  “Kb”;
?>

PHP 上传大文件

nginx:413 Request Entity Too Large

设置PHP上传大文件的时候,如果遇到这个提示,一般设置NGINX的最大上传限制即可。

client_max_body_size 参数,默认大小为1M

NGINX 设置:client_max_body_size 10m;

设置PHP.ini 这些参数

upload_max_filesize = 8M

post_max_size = 8M

memory_limit = 8M

php的 addslashes和mysql

收录一下

很好的说明了addslashes和mysql_real_escape_string的区别,虽然国内很多PHP coder仍在依靠addslashes防止SQL注入(包括我在内),我还是建议大家加强中文防止SQL注入的检查。addslashes的问题在于黑客可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会被看作是单引号,所以addslashes无法成功拦截。
当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧。
另外对于php手册中get_magic_quotes_gpc的举例:

代码如下:

if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST[‘lastname’]);
} else {
$lastname = $_POST[‘lastname’];
}

 

最好对magic_quotes_gpc已经开放的情况下,还是对$_POST[‘lastname’]进行检查一下。
再说下mysql_real_escape_string和mysql_escape_string这2个函数的区别:
mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:
mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑。
总结一下:
addslashes() 是强行加;
mysql_real_escape_string() 会判断字符集,但是对PHP版本有要求;
mysql_escape_string不考虑连接的当前字符集。

MySQL 1364 错误提示

在WINDOWS 下新装了一个MYSQL 下,发现原来运行正常的程序都跑不通了,查找了一番,发现是数据库设计时候默认值的问题。

因为启动了严格的数据存储模式,所以会导致数据无法更新写入。

执行SQL

SELECT @@GLOBAL.sql_mode;

STRICT_TRANS_TABLES(存储引擎启用严格模式,非法数据值被拒绝)

需要解决这个问题,接下来执行

SQL

SET @@GLOBAL.sql_mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”;

退出数据库,刷新程序正常运行

nginx 做反向代理,php获取客户真实ip的问题

网站的前端用NGINX,做的PROXY来进行负责均衡导致内部webServer 所以获取的IP 都是nginx 负责均衡机器的IP。

这样很多基于IP判断的PHP程序都会出现一系列的问题,

修改NGINX的配置文件NGINX.CONF 在里面加上
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
这只是告诉NGINX在反向代理的时候发送域名和客户真实IP

 

 

NGINX 负载均衡的问题记录

NGINX 负载均衡的问题

nginx 负责均衡在高压力的高并发时候,会出现图片显示不正常,或者显示图片只有一半的情况。

在发现大图片在浏览器显示时不完整,sendfile 是其中的一个原因,sendfile 必须关闭,否则会出现权限不可读取的问题。

如果在关闭sendfile 后问题依旧,就需要排查nginx的缓冲区的问题了。

proxy_buffering

语法: proxy_buffering on|off

默认值: proxy_buffering on

上下文: http, server, location

将 proxy_buffering 设为 off 后问题解决。

记录一下,备忘。