php异步请求之popen 应用场景:阿里云oss大图片压缩

正文开始

<p>阿里云的oss图片库对图片输出有20M的限制,所以我们需要在上传超过此尺寸的图片时进行二次压缩,先下载到本地服务器,自己压缩再重新传给阿里云。得出我们需要的尺寸。此处有个需求的问题:</p><p>如果图片加上oss的后缀作保护,那么展示的小图片为了节省阿里云空间而直接暴露原图url,下载原图的时候再加个定义的原图后缀即可。  问题来了,超过20M的图片是不支持后面加后缀进行压缩输出的,必须打开原图url下载。所以小图的路径不能直接暴露原图路径,还是要重新生成小图url,又不能节省图片空间了。</p><p><br /></p><p>目前还是采取后者方式吧。</p><p><br /></p><p>popen用法</p><p></p><pre>//异步请求生成封面 $postData = [ 'uid' => $uid, 'shareNumber' => $shareNumber, 'f_id' => $f_id, 'fileUrl' => $fileUrl, ]; $postDataStr = base64_encode(serialize($postData)); pclose(popen("php -f ../oss/create_share_cover.php {$postDataStr} &", 'r'));</pre> 先用<pre>serialize</pre>把数组都转成字符串。<p></p><p>接受文件 :<br /></p><p></p><pre>create_share_cover.php</pre>头部获取参数。<p></p><p></p><pre>//popen打开此页面,只能用$argv 来取参数 [0]=>当前文件名 [1]...参数值 $optionsStr = isset($argv[1]) ? $argv[1] : ''; $optionsStr = unserialize(base64_decode($optionsStr)); $uid = isset($optionsStr['uid']) ? intval($optionsStr['uid']) : 0; $f_id = isset($optionsStr['f_id']) ? intval($optionsStr['f_id']) : 0; $shareNumber = isset($optionsStr['shareNumber']) ? trim($optionsStr['shareNumber']) : ''; $fileUrl = isset($optionsStr['fileUrl']) ? trim($optionsStr['fileUrl']) : '';</pre> <p></p><p>popen 主要注意参数、路径问题即可。<br /></p><p></p><pre>popen("php -f url.php 参数1 参数2 & ", 'r'));</pre><p>其中末尾的&表示放入后台执行脚本<br /></p><p>php.ini配置:<br /></p><p></p><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'宋体';font-size:8.4pt;">disable_functions中要移除 popen </pre><br /><p></p><p></p>

正文结束

PHP接口(interface)和抽象类(abstract) PHP中Trait详解及其应用