2017年6月

nginx日志
2017/06/27 14:16:53 [error] 70595#0: *986149 FastCGI sent in stderr: "PHP message: PHP Warning: imagecreatefromjpeg(): gd-jpeg: JPEG library reports unrecoverable error: in xxxx.php on line 81
PHP message: PHP Warning: imagecreatefromjpeg(): '/upload/20170627/2017062706165379s1U.jpg' is not a valid JPEG file in xxxx.php on line 81
从日志来看,图片格式错误,不是正确的 JPEG (is not a valid JPEG)
再看看php是怎么判断图片类型的,竟然是通过扩展名,扩展名是能随便改的。

if(strpos(strtolower($filename),'.jpg') !== false){
   $source = imagecreatefromjpeg($filename);     
}
if(strpos(strtolower($filename),'.jpeg') !== false){
   $source = imagecreatefromjpeg($filename);     
}
if(strpos(strtolower($filename),'.gif') !== false){
   $source = imagecreatefromgif($filename);      
}
if(strpos(strtolower($filename),'.png') !== false){
   $source = imagecreatefrompng($filename);      
}
if(strpos(strtolower($filename),'.bmp') !== false){
   $source = imagecreatefromwbmp($filename);     
}

测试下那个图片

print_r(getimagesize('E:\cc.jpg'));

Array
(
    [0] => 750
    [1] => 1000
    [2] => 3
    [3] => width="750" height="1000"
    [bits] => 8
    [mime] => image/png
)

image/png!!!!!!!!!!!!!
*还是 getimagesize 来获取扩展名吧。

如下:

location ~ /upload/.*\.(php|php5)?$ {
                deny all;
        }

Linux文件访问权限分为可读,可写和可执行三种。

可用ls -l命令查看

第一个字符代表文件类型。d代表目录,-代表非目录。

接下来每三个字符为一组权限,分为三组,依次代表所有者权限,同组用户权限,其它用户权限

每组权限的三个字符依次代表是否可读,是否可写,是否可执行

r 表示拥有读的权限

w 表示拥有写的权限

x 表示拥有可执行的权限

  • 表示没有该权限

chmod 设置权限时

4代表读权限,2代表写权限,1代表执行权限

7=4 + 2 + 1,表示拥有可读可写可执行权限

5=4 + 1,表示拥有可读可执行权限,但是没有写权限

0 代表没有任何权限

一般一个WEB目录禁止写入的时候,设置为 755 。

但要想一个目录禁止运行php,不能设置为766,所有的操作都必须要有1.才能浏览目录这些 解析文件等.

php运行 不等于 linux的执行 ,

应该从nginx配置目录中配置。

server {
        listen  80;
        #rewrite_log on;
        limit_req zone=req_one burst=30 nodelay;
        server_name xxxxx;
        access_log  /data/API_UP/access.log;
        error_log /data/API_UP/error.log debug;
        root  /data/API_UP/;
        index  index.php index.html index.htm;
         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ /upload/.*\.(php|php5)?$ {
                deny all;
        }
        location  ~ .php {
            root   /data/API_UP/;
            fastcgi_read_timeout 150;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
            include        fastcgi_params;
        }
        location ~ /\.ht {
            deny  all;

        }
}

一般综合架构站点时,静态资源,上传目录,PHP站点目录,可能在不同的文件夹甚至不同的服务器。
如tp5建议一样,入口目录改变,不用在根目录,nginx直接磅定到入口目录,也可提高安全性 但这里要允许php跳出,

做顶部搜索功能,在点击搜索框的时候,显示一定的历史搜索记录。
在搜索框被点击的时候,有取消的按钮链接用于取消搜索。

流程如下:

搜索框获得焦点,手机会弹出软键盘。 底部的position: fixed;菜单就会顶上来,有人理解为fixed失效,而我觉得底部fixed的参考受到软键盘的影响,不能准确固定于底部。
在iphone测试的时候,点击完成按钮取消软键盘,底部是正常显示。
点击取消链接,使input失去焦点,底部footer会在屏幕中间停留一下 然后迅速显示到底部,严重影响浏览。
曾想过用一个timout延迟显示底部,并且这样确认是可靠的,底部的position: fixed;延迟500ms显示,位置正确。 但无法把握与键盘消失的时间对接上,有时候键盘消失很久才显示底部。
有时候又提前显示。这个值不好把握,也许不同设备键盘消失时间不同。
通过网上查不少资料,大多数人都选择,在弹出软键盘的时候,人工隐藏掉主体内容使其高度只有半屏幕多或刚好一屏,反正不能超过。
然后取消搜索的时候,再显示主体内容。
这样就能很好地处理了这个问题。
66.jpg
然后幻想着,是不是所有APP的搜索框一点击,就调出的是空白页面加载历史记录,有没有出于这个原因呢。