在公司的图片服务器中,同一个产品一般会存在对应的大图和缩略图.因此,我们在开发手机端的web网站时,默认使用的是产品图片的缩略图,查询数据库时获取的是缩略图的路径.但是,不知什么原因,时不时的,测试的同事总会找到我们,说产品图片没显示出来,是个bug,需要
在公司的图片服务器中,同一个产品一般会存在对应的大图和缩略图.因此,我们在开发手机端的web网站时,默认使用的是产品图片的缩略图,查询数据库时获取的是缩略图的路径.但是,不知什么原因,时不时的,测试的同事总会找到我们,说产品图片没显示出来,是个bug,需要修改.
那么,问题来了.
(1)PHP后台如何判断远程服务器上的图片是否存在
解决思路:获取图片路径-->对图片是否存在进行判断-->不存在,使用大图
<span>/*</span><span>* * @desc 检查远程图片是否存在 * @param string $url 图片远程地址 * @return boolean $found 存在为true,否则false </span><span>*/</span> <span>function</span> check_remote_file_exists(<span>$url</span><span>) { </span><span>//</span><span>curl初始化</span> <span>$curl</span> = curl_init(<span>$url</span><span>); </span><span>//</span><span>不取回数据</span> curl_setopt(<span>$curl</span>, CURLOPT_NOBODY, <span>true</span><span>); </span><span>//</span><span>发送请求,接收结果</span> <span>$result</span> = curl_exec(<span>$curl</span><span>); </span><span>$found</span> = <span>false</span><span>; </span><span>if</span> (<span>$result</span> !== <span>false</span><span>) { </span><span>//</span><span>检查http响应码是否为200</span> <span>$statusCode</span> = curl_getinfo(<span>$curl</span>,<span> CURLINFO_HTTP_CODE); </span><span>if</span> (<span>$statusCode</span> == 200<span>) { </span><span>$found</span> = <span>true</span><span>; } } </span><span>//</span><span>关闭curl资源</span> curl_close(<span>$curl</span><span>); </span><span>//</span><span>返回结果</span> <span>return</span> <span>$found</span><span>; } </span><span>$url</span>='http://home.baidu.com/resource/r/home/img/logo-yy.gif'<span>; </span><span>$error_url</span>='http://home.baidu.com/resource/r/home/img/logo-yy111111.gif'<span>; </span><span>var_dump</span>(check_remote_file_exists(<span>$url</span><span>)); </span><span>echo</span> '<br>'<span>; </span><span>var_dump</span>(check_remote_file_exists(<span>$error_url</span><span>)); </span><span>/*</span><span> 以上例子输出: bool(true) bool(false) </span><span>*/</span>
可以看出,PHP中CURL系列函数还是很强大的.
在百度时,我还发现了说使用fopen()函数进行判断的,但是经实验,未能实现相应功能.举例如下:
<span> 1</span> <span>$url</span>='http://home.baidu.com/resource/r/home/img/logo-yy.gif'<span>; </span><span> 2</span> <span>$error_url</span>='http://home.baidu.com/resource/r/home/img/logo-yy111111.gif'<span>; </span><span> 3</span> <span> 4</span> <span>if</span>( @<span>fopen</span>( <span>$error_url</span>, 'r'<span> ) ) </span><span> 5</span> <span>{ </span><span> 6</span> <span>echo</span> 'File Exits'<span>; </span><span> 7</span> <span>} </span><span> 8</span> <span>else</span> <span> 9</span> <span>{ </span><span>10</span> <span>echo</span> 'File Do Not Exits'<span>; </span><span>11</span> <span>} </span><span>12</span> <span>/*</span> <span>13</span> <span>以上例子输出:File Exits </span><span>14</span> <span>*/</span>
(2)前端jquery中使用load事件对图片的处理
进一步思考,前端使用jquery能否判断远程图片是否存在呢?遗憾的是,在写作本文时,未能找到判断的方法.
示例如下:
注意:引入jquery.js
<span> 1</span> <span><span>DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"</span><span>></span> <span> 2</span> <span><span>html</span><span>></span> <span> 3</span> <span><span>head</span><span>></span> <span> 4</span> <span><span>meta </span><span>http-equiv</span><span>="Content-Type"</span><span> content</span><span>="text/html; charset=utf-8"</span><span>></span> <span> 5</span> <span><span>title</span><span>></span>load event<span></span><span>title</span><span>></span> <span> 6</span> <span><span>script </span><span>language</span><span>="javascript"</span><span> src</span><span>="jquery.js"</span><span>></span><span>script</span><span>></span> <span> 7</span> <span></span><span>head</span><span>></span> <span> 8</span> <span><span>body</span><span>></span> <span> 9</span> <span><span>img </span><span>src</span><span>="http://home.baidu.com/resource/r/home/img/logo-yy.gif"</span><span> alt</span><span>=""</span><span> id</span><span>='test'</span><span>/></span> <span>10</span> <span></span><span>body</span><span>></span> <span>11</span> <span><span>script</span><span>></span> <span>12</span> <span>//</span><span>jquery load event test</span> <span>13</span> <span>//</span><span>var h=$('#test').height();</span> <span>14</span> <span>//</span><span>document.write(h);</span> <span>15</span> <span>$(</span><span>'</span><span>img</span><span>'</span><span>).each(</span><span>function</span><span>(){ </span><span>16</span> <span>//</span><span>先隐藏图片</span> <span>17</span> <span>$(</span><span>this</span><span>).hide(); </span><span>18</span> <span>//</span><span>监听load事件</span> <span>19</span> <span>$(</span><span>this</span><span>).bind(</span><span>'</span><span>load</span><span>'</span><span>,</span><span>function</span><span>(){ </span><span>20</span> <span>//</span><span>加载完成,显示图片</span> <span>21</span> <span>$(</span><span>this</span><span>).show(); </span><span>22</span> <span>}); </span><span>23</span> <span>}); </span><span>24</span> <span></span><span>script</span><span>></span> <span>25</span> <span></span><span>html</span><span>></span></span></span></span></span></span></span></span></span></span>
使用load事件时,有两点需要注意:
第一,load事件和当前jquery代码执行顺序是异步的,
第二,$(document).ready()指的是html代码加载完成,load事件指的是请求的图片下载完成.
http://www.cnblogs.com/kinger/p/4292412.html