我之前写的这段代码。它检查外部服务器是否有图像,如果存在,它将回显列表中的图像。我有最多13条记录要检查。我认为阵列在这里最好,但不确定它们是如何工作的。
$a1="".$cdnurl."assets/".$pid."/1/medium.jpg";
$a2="".$cdnurl."assets/".$pid."/2/medium.jpg";
$a3="".$cdnurl."assets/".$pid."/3/medium.jpg";
$a4="".$cdnurl."assets/".$pid."/4/medium.jpg";
$a5="".$cdnurl."assets/".$pid."/5/medium.jpg";
$a6="".$cdnurl."assets/".$pid."/6/medium.jpg";
$a7="".$cdnurl."assets/".$pid."/7/medium.jpg";
$a8="".$cdnurl."assets/".$pid."/8/medium.jpg";
$a9="".$cdnurl."assets/".$pid."/9/medium.jpg";
$a10="".$cdnurl."assets/".$pid."/10/medium.jpg";
$a11="".$cdnurl."assets/".$pid."/11/medium.jpg";
$a12="".$cdnurl."assets/".$pid."/12/medium.jpg";
$a13="".$cdnurl."assets/".$pid."/13/medium.jpg";
if(@fopen($a1,"r")){
echo '<li class="royalSlide"><img src="'.$a1.'" alt="" /></li>';
}
if(@fopen($a2,"r")){echo '<li class="royalSlide"><img src="'.$a2.'" alt="" /></li>';
}
if(@fopen($a3,"r")){echo '<li class="royalSlide"><img src="'.$a3.'" alt="" /></li>';
}
if(@fopen($a4,"r")){echo '<li class="royalSlide"><img src="'.$a4.'" alt="" /></li>';
}
if(@fopen($a5,"r")){echo '<li class="royalSlide"><img src="'.$a5.'" alt="" /></li>';
}
if(@fopen($a6,"r")){echo '<li class="royalSlide"><img src="'.$a6.'" alt="" /></li>';
}
if(@fopen($a7,"r")){echo '<li class="royalSlide"><img src="'.$a7.'" alt="" /></li>';
}
if(@fopen($a8,"r")){echo '<li class="royalSlide"><img src="'.$a8.'" alt="" /></li>';
}
if(@fopen($a9,"r")){echo '<li class="royalSlide"><img src="'.$a9.'" alt="" /></li>';
}
if(@fopen($a10,"r")){echo '<li class="royalSlide"><img src="'.$a10.'" alt="" /></li>';
}
if(@fopen($a11,"r")){echo '<li class="royalSlide"><img src="'.$a11.'" alt="" /></li>';
}
if(@fopen($a12,"r")){echo '<li class="royalSlide"><img src="'.$a12.'" alt="" /></li>';
}
答案 0 :(得分:5)
for ($i = 1; $i < 14; $i++)
{
$elem = $cdnurl . "assets/" . $pid . "/$i/medium.jpg";
if(is_readable($elem))
{
echo '<li class="royalSlide"><img src="'.$elem.'" alt="" /></li>';
}
}
答案 1 :(得分:2)
使用foreach循环不会使它更快,但会让它看起来更干净。
您的设计错误,每次加载页面时都不需要检查资产是否存在。使脚本生成HTML并加载该HTML,而不是每次都连接到CDN。
你现在在CDN上加载了两倍的负载。如果您需要隐藏某些<li>
元素,如果图像丢失,请使用Javascript删除图像,如果图像无法加载。
假定URL为“... number ...”的代码:
<?php
foreach (range(0, 13) as $number) {
$url = $cdnurl . "assets/$pid/$number/medium.jpg";
echo '<li class="royalSlide">
<img src="' . $url . '" onerror="parentNode.parentNode.removeChild(parentNode)" alt="" />
</li>';
}
?>
此代码是对您问题代码的增强:
<?php
foreach (range(0, 13) as $number) {
$url = $cdnurl . "assets/$pid/$number/medium.jpg";
// skip URLs which cannot be found
if (!file_exists($url)) continue;
echo '<li class="royalSlide">
<img src="' . $url . '" alt="" />
</li>';
}
?>
答案 2 :(得分:1)
是的,您可以使用列表。
一个好主意是用for:
创建它$a = array();
for($i = 0; î < 14; ++$i)
{
$a[] = $cdnurl."assets/".$pid."/".$i."/medium.jpg";
}
然后你可以阅读它:
foreach($a as $tmpA)
{
...
}
在此内部,您必须测试这是您服务器上的图像,并显示它。 但你不应该使用fopen。对于很多resae。
首先你使用@因为你想要对此有任何Wrning,如果你有警告,你正在做wring,并且php正在尝试为你改变它。 Taht是你干净代码的工作。 但更重要的是,fopen根据文件打开创建一个ressource。然后在此页面中创建14个资源!它们将在页面末尾被破坏,因为你永远不会关闭它。
有一个php函数,它是:file_exitsts。 Taht是适合你的人:
foreach($a as $tmpA)
{
if (file_exists($filename))
{
echo '<li class="royalSlide"><img src="'.$tmpA.'" alt="" /></li>';
}
}
答案 3 :(得分:0)
虽然您可以使此代码更清晰,但您无法加快速度。 从外部服务器检查图像本身是一个可怕的想法,它总是很慢。仅仅因为它是外部服务器。
我想知道是否有任何理由检查每个图像是否存在。他们变化如此之快吗?
答案 4 :(得分:-1)
for($i=1;i<=13;i++){
$item =$cdnurl.'assets/'.$pid.'/'.$i.'/'.medium.jpg;
echo (@fopen($item,'r')?'<li class="royalSlide"><img src="'.$item.'" alt="" /></li>':'');
}
假设文件确实以数字命名,那么会做到这一点