/** * 压缩并替换指定路径的图片文件 * * @param string $path 图片文件路径 * @param int $quality 压缩质量(0-100) * @return bool 成功返回 true,失败返回 false */ function compressAndReplaceImage($path, $quality = 80) { $size = filesize($path); if ($size < 1024 * 1024) { //小于1mb不压缩 return true; } // 获取图片信息 list($width, $height, $type) = getimagesize($path); switch ($type) { case IMAGETYPE_JPEG: // 载入 JPEG 文件 $src = @imagecreatefromjpeg($path); // 针对 JPEG 文件进行压缩 imagejpeg($src, $path, $quality); break; case IMAGETYPE_PNG: // 载入 PNG 文件 $src = imagecreatefrompng($path); // 取消 alpha 通道,并增加像素边缘以防止出现黑色边框 imagealphablending($src, false); imagesavealpha($src, true); $transparent = imagecolorallocatealpha($src, 255, 255, 255, 127); imagefilledrectangle($src, 0, 0, $width, $height, $transparent); // 针对 PNG 文件进行压缩 imagepng($src, $path, 9); break; case IMAGETYPE_GIF: // 载入 GIF 文件 $src = imagecreatefromgif($path); // 针对 GIF 文件进行压缩 imagegif($src, $path); break; default: // 不是支持的图片类型 return false; } imagedestroy($src); return true; }
浏览器的同源策略(Same origin policy),它是一种约定,也是浏览器最核心最基本的安全功能。所谓同源指的是:协议(是指http和https)、域名(domain)、端口(port)相同。
在php后端api入口文件中加入下面的代码即可解决问题:
header("Access-Control-Allow-Origin:*"); header("Access-Control-Allow-Methods:GET, POST, OPTIONS, DELETE"); header("Access-Control-Allow-Headers:DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, Accept-Language, Origin, Accept-Encoding");
CORS是一个W3C标准,全称是“跨域资源共享”(Cross-origin resource sharing),它允许浏览器向跨源服务器发出XMLHttpRequest请求,从而克服了只能同源调用的限制。
Access-Control-Allow-Origin指的是允许发起跨域的域名。
在浏览器跨域请求中,请求头(request headers)会出现Origin字段(有个奇怪现象,谷歌游览器在非跨域情况下,也会发送origin字段),这个字段会与Access-Control-Allow-Origin字段的内容进项匹配,如果发现符合Access-Control-Allow-Origin字段的要求才会放行通过,否则会出现CORS错误。
但实际上Access-Control-Allow-Origin有很多的设置方式,“*”是最粗暴简单的,但也是最不安全的,它代表着所有请求都允许通过。如果为了服务器安全考虑不建议这么设置,最好还是使用具体的域名地址。而且如果是“*”的话,浏览器将不会发送cookies,即使你的xhr设置了withCredentials,只有在指定域名下才允许发送。
Access-Control-Allow-Methods指的是请求的方式。
Access-Control-Allow-Headers指的是请求的自定义请求头字段。
跨域时浏览器会向服务器发送预检请求,询问是否支持跨域的自定义header字段,这时候就需要设置的Access-Control-Allow-Headers字段进行应答。
封装性:
也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。于是开发人员只 需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就能实现MVC分工合作,也能有效避免程序间相互依赖,实现代码模块间松藕合。
继承性:
就是子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。PHP只支持单继承,也就是说一个子类只能有一个父类。
多态性:
子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这种技术就是多态性。多态性增强了软件的灵活性。
易维护
采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
质量高
在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
效率高
在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
易扩展
由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。
直接在网站运行目录的.htaccess文件中输入以下内容:
Apache:
<IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L] </IfModule>
Nginx:
location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } }