PHP: Comment vérifier si le fichier image existe?
je dois voir si une image spécifique existe sur mon cdn.
j'ai essayé la suivante et ça ne marche pas:
if (file_exists(http://www.example.com/images/$filename)) {
echo "The file exists";
} else {
echo "The file does not exist";
}
Même si l'image existe ou n'existe pas, il dit toujours "Le fichier existe". Je ne sais pas pourquoi sa ne fonctionne pas...
18 réponses
vous avez besoin du nom du fichier entre guillemets au moins (comme chaîne):
if (file_exists('http://www.mydomain.com/images/'.$filename)) {
… }
assurez-vous également que $filename
est correctement validé. Et puis, cela ne fonctionnera que lorsque allow_url_fopen
sera activé dans votre config PHP
if (file_exists('http://www.mydomain.com/images/'.$filename)) {}
ça n'a pas marché pour moi. La façon dont je l'ai fait était d'utiliser getimagesize.
$src = 'http://www.mydomain.com/images/'.$filename;
if (@getimagesize($src)) {
notez que le '@' signifiera que si l'image n'existe pas (auquel cas la fonction lancera habituellement une erreur: getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed
) elle retournera false.
bien, file_exists
ne dit pas si un fichier existe, il dit si un chemin existe . ⚡⚡⚡⚡⚡⚡⚡
donc, pour vérifier s'il s'agit d'un fichier, vous devez utiliser is_file
avec file_exists
pour savoir s'il y a vraiment un fichier derrière le chemin, sinon file_exists
retournera true
pour tout chemin existant.
Voici la fonction que j'utilise :
function fileExists($filePath)
{
return is_file($filePath) && file_exists($filePath);
}
essayez comme ceci:
$file = '/path/to/foo.txt'; // 'images/'.$file (physical path)
if (file_exists($file)) {
echo "The file $file exists";
} else {
echo "The file $file does not exist";
}
une chose que vous devez d'abord comprendre: vous n'avez pas de fichiers .
Un fichier fait l'objet d'un système de fichiers , mais vous faites votre demande en utilisant le protocole HTTP qui ne supporte pas de fichiers mais des URL.
si, vous devez demander un fichier inexistant en utilisant votre navigateur et de voir le code de réponse. si ce n'est pas 404, vous n'êtes pas en mesure d'utiliser les wrappers pour voir si un fichier existe et vous devez demander votre cdn en utilisant un autre protocole, FTP par exemple
Voici la façon la plus simple de vérifier si un fichier existe:
if(is_file($filename)){
return true; //the file exist
}else{
return false; //the file does not exist
}
Si le fichier est sur votre domaine, vous n'avez pas besoin de mettre l'URL complète. Seulement le chemin vers le fichier. Si le fichier est dans un autre répertoire, vous devez faire précéder le chemin avec "."
$file = './images/image.jpg';
if (file_exists($file)) {}
souvent fois le"."est laissé de côté qui va provoquer le fichier comme n'existant pas, quand il le fait.
public static function is_file_url_exists($url) {
if (@file_get_contents($url, 0, NULL, 0, 1)) {
return 1;
}
return 0;
}
il y a une différence majeure entre is_file
et file_exists
.
is_file
retourne true pour les fichiers (réguliers):
Renvoie VRAI si le nom de fichier existe et est un fichier régulier, FALSE dans le cas contraire.
file_exists
retourne true pour les fichiers et les répertoires:
Renvoie VRAI si le fichier ou le répertoire spécifié par filename existe; FALSE dans le cas contraire.
Note: cochez aussi cette question sur le débordement des piles pour plus d'information sur ce sujet.
vous devez utiliser absolute path pour voir si le fichier existe.
$abs_path = '/var/www/example.com/public_html/images/';
$file_url = 'http://www.example.com/images/' . $filename;
if (file_exists($abs_path . $filename)) {
echo "The file exists. URL:" . $file_url;
} else {
echo "The file does not exist";
}
si vous écrivez pour le CMS ou le cadre PHP, alors autant que je sache, tous ont défini constant pour le chemin racine du document.
E. G WordPress utilise ABSPATH qui peut être utilisé globalement pour travailler avec des fichiers sur le serveur en utilisant votre code ainsi que l'url du site.
exemple Wordpress:
$image_path = ABSPATH . '/images/' . $filename;
$file_url = get_site_url() . '/images/' . $filename;
if (file_exists($image_path)) {
echo "The file exists. URL:" . $file_url;
} else {
echo "The file does not exist";
}
mile supplémentaire ici :). Parce que ce code n'aurait pas besoin de beaucoup d'entretien et assez solide, Je l'écrirais avec comme sténographie si la déclaration:
$image_path = ABSPATH . '/images/' . $filename;
$file_url = get_site_url() . '/images/' . $filename;
echo (file_exists($image_path))?'The file exists. URL:' . $file_url:'The file does not exist';
Raccourci SI l'instruction a expliqué:
$stringVariable = ($trueOrFalseComaprison > 0)?'String if true':'String if false';
vous pouvez utiliser cURL. Vous pouvez obtenir cURL pour seulement vous donner les headers, et pas le corps, ce qui pourrait le rendre plus rapide. Un mauvais domaine peut toujours prendre un certain temps parce que vous attendrez la requête pour time-out; vous pouvez probablement changer la durée de timeout en utilisant cURL.
voici un exemple:
function remoteFileExists($url) {
$curl = curl_init($url);
//don't fetch the actual page, you only want to check the connection is ok
curl_setopt($curl, CURLOPT_NOBODY, true);
//do request
$result = curl_exec($curl);
$ret = false;
//if request did not fail
if ($result !== false) {
//if request was ok, check response code
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($statusCode == 200) {
$ret = true;
}
}
curl_close($curl);
return $ret;
}
$exists = remoteFileExists('http://stackoverflow.com/favicon.ico');
if ($exists) {
echo 'file exists';
} else {
echo 'file does not exist';
}
vous pouvez utiliser la fonction file_get_contents
pour accéder aux fichiers distants. Voir http://php.net/manual/en/function.file-get-contents.php pour plus de détails.
essayez ceci:
if (file_exists(FCPATH . 'uploads/pages/' . $image)) {
unlink(FCPATH . 'uploads/pages/' . $image);
}
lire les 5 premiers octets du formulaire HTTP en utilisant fopen()
et fread()
puis utiliser ceci:
DEFINE("GIF_START","GIF");
DEFINE("PNG_START",pack("C",0x89)."PNG");
DEFINE("JPG_START",pack("CCCCCC",0xFF,0xD8,0xFF,0xE0,0x00,0x10));
pour détecter l'image.
file_exists
lit non seulement les fichiers, mais aussi les chemins. ainsi, lorsque $filename
est vide, la commande s'exécute comme si elle était écrite comme ceci:
file_exists("http://www.example.com/images/")
si le répertoire /images/ existe, la fonction retournera toujours true
.
Je l'écris habituellement comme ceci:
// !empty($filename) is to prevent an error when the variable is not defined
if (!empty($filename) && file_exists("http://www.example.com/images/$filename"))
{
// do something
}
else
{
// do other things
}
file_exists($filepath)
retournera un vrai résultat pour un répertoire et un chemin de fichier complet, ce qui n'est pas toujours une solution quand un nom de fichier n'est pas passé.
is_file($filepath)
ne retourne true pour filepaths
si vous utilisez curl, vous pouvez essayer le script suivant:
function checkRemoteFile($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
// don't download content
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if(curl_exec($ch)!==FALSE)
{
return true;
}
else
{
return false;
}
}
URL de référence: https://hungred.com/how-to/php-check-remote-email-url-image-link-exist /
vous avez besoin du chemin du serveur avec file_exists
par exemple
if (file_exists('/httpdocs/images/'.$filename)) {echo 'File exist'; }