确定文件是否不存在

时间:2014-08-19 11:00:01

标签: php file-io

我有一些似乎符合逻辑的代码,但没有按预期工作。

<?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,但我得到的结果相同。

4 个答案:

答案 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
}