我有一些似乎符合逻辑的代码,但没有按预期工作。
<?php
$ukip_code = "PTXC";
$show_logo = "http://www.ukipme.com/img/confs/" . strtolower($ukip_code) . ".gif";
echo $show_logo . "<br>";
echo "<img src=" . $show_logo . "><br>";
if (!file_exists($show_logo)) { // or file_exists($show_logo) === false
$show_logo = "http://placehold.it/165x100/&text={$ukip_code}";
}
echo $show_logo;
?>
我的第一个echo
显示了原始文件的网址。然后我echo
img
标记来证明此文件是实际文件。
然后我检查文件是否存在,如果不存在,请使用占位符图像。 Echo
此变量现在应再次提供原始网址(因为它显然确实存在),但它会提供占位符网址。为什么呢?
我也尝试在我的file_exists($show_logo) === false
声明中使用if
,但我得到的结果相同。
答案 0 :(得分:1)
您可以使用get_headers()
方法获取资源的状态:
http://php.net/manual/en/function.get-headers.php
$regex = "(200|201|203|204|205|206)";
$headers = get_headers($show_logo);
preg_match($regex, $headers[0], $match);
if (!$match) {
$show_logo = "http://placehold.it/165x100/&text={$ukip_code}";
}
echo $show_logo;
答案 1 :(得分:0)
您应该使用站点的服务器路径,而不是站点的URL。像/home/etc/file_name
你的var应该是这样的
$show_logo = "/{the site server path}/img/confs/" . strtolower($ukip_code) . ".gif";
如果您需要__FILE__
常量,则会为您提供当前文件的绝对路径。
答案 2 :(得分:0)
您可以尝试阅读网址后面的内容。然而,缺点是这将为大图像产生一些流量。但它确保如果文件可以从给定的URL下载它可用。 curl_setopt可以为您提供更多选择。
<?php
$ukip_code = "PTXC";
$opt = FALSE;
$show_logo = "http://www.ukipme.com/img/confs/" . strtolower($ukip_code) . ".gif";
echo $show_logo . "<br>";
echo "<img src=" . $show_logo . "><br>";
// Create a curl session
$ch = curl_init($show_logo);
// Execution
curl_exec($ch);
// Verification if an error occured
if(!curl_errno($ch))
{
$info = curl_getinfo($ch, $opt);
}
// Fermeture du gestionnaire
curl_close($ch);
if ($opt === FALSE) {
$show_logo = "http://placehold.it/165x100/&text={$ukip_code}";
}
echo $show_logo;
?>
答案 3 :(得分:0)
尝试这样的事情 -
$file = $_SERVER['DOCUMENT_ROOT'].'sitepathtofile';
if (!file_exists($file)) {
set the placeholder
}