J'ai besoin de voir si une image spécifique existe sur mon cdn.
J'ai essayé ce qui suit 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, elle dit toujours "Le fichier existe". Je ne sais pas pourquoi ça ne marche pas ...
Vous avez besoin du nom de fichier entre guillemets au moins (sous forme de chaîne):
if (file_exists('http://www.mydomain.com/images/'.$filename)) {
… }
Assurez-vous également que $filename
est correctement validé. Et ensuite, cela ne fonctionnera que si allow_url_fopen
est activé dans votre configuration PHP
if (file_exists('http://www.mydomain.com/images/'.$filename)) {}
Cela n'a pas fonctionné pour moi. La façon dont je l'ai fait utilisait getimagesize.
$src = 'http://www.mydomain.com/images/'.$filename;
if (@getimagesize($src)) {
Notez que le '@' signifiera que si l'image n'existe pas (dans ce cas, la fonction générera généralement une erreur: getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed
), elle retournera false.
Eh bien,file_exists
ne dit pas si un fichier existe, il dit si un chemin existe . ⚡⚡⚡⚡⚡⚡⚡
Donc, pour vérifier si c'est un fichier, vous devez utiliseris_file
avecfile_exists
pour savoir s'il y a vraiment un fichier derrière le chemin, sinonfile_exists
retourneratrue
pour tout chemin existant.
Voici la fonction que j'utilise:
function fileExists($filePath)
{
return is_file($filePath) && file_exists($filePath);
}
Essayez comme ça:
$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";
}
Voici le moyen le 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
}
Une chose que vous devez comprendre d’abord: vous n’avez pas de fichiers .
Un fichier est sujet d'un système de fichiers, mais vous faites votre demande en utilisant le protocole HTTP qui ne prend en charge que les fichiers, à l'exception des URL.
Vous devez donc demander un fichier non existant à l'aide de votre navigateur et voir le code de réponse. si ce n'est pas 404, vous ne pouvez utiliser aucun wrapper pour voir si un fichier existe et vous devez demander votre cdn en utilisant un autre protocole, FTP par exemple
Si le fichier se trouve sur votre domaine local, vous n'avez pas besoin de mettre l'URL complète. Seul le chemin d'accès au fichier. Si le fichier se trouve dans un répertoire différent, vous devez alors préfacer le chemin avec "."
$file = './images/image.jpg';
if (file_exists($file)) {}
Souvent, le "." est laissé, ce qui fera apparaître le fichier comme non existant, alors qu’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 existe une différence majeure entre is_file
et file_exists
.
is_file
renvoie vrai pour les fichiers (normaux):
Renvoie TRUE si le nom du fichier existe et est un fichier normal, FALSE sinon.
file_exists
renvoie true pour les fichiers et les répertoires:
Renvoie TRUE si le fichier ou le répertoire spécifié par nom_fichier existe; FALSE sinon.
Remarque: _ Vérifiez également cette question de stackoverflow pour plus d'informations sur ce sujet.
vous pouvez utiliser cURL. Vous pouvez obtenir que cURL ne vous donne que les en-têtes, et non le corps, ce qui pourrait le rendre plus rapide. Un mauvais domaine peut toujours prendre un certain temps car vous attendez que la requête expire; 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 devez utiliser un chemin absolu 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 un CMS ou un framework PHP, pour autant que je sache, tous ont défini une constante pour le chemin racine du document.
wordPress utilise par exemple 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";
}
Je vais un kilomètre supplémentaire ici :). Parce que ce code n'aurait pas besoin de beaucoup de maintenance et d'assez solide, je l'écrirais avec un raccourci si:
$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';
Déclaration IF abrégée expliquée:
$stringVariable = ($trueOrFalseComaprison > 0)?'String if true':'String if false';
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.
essaye ça :
if (file_exists(FCPATH . 'uploads/pages/' . $image)) {
unlink(FCPATH . 'uploads/pages/' . $image);
}
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;
}
}
Référence URL: 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'; }
Lisez les 5 premiers octets de HTTP en utilisant fopen()
et fread()
, puis utilisez ceci:
DEFINE("GIF_START","GIF");
DEFINE("PNG_START",pack("C",0x89)."PNG");
DEFINE("JPG_START",pack("CCCCCC",0xFF,0xD8,0xFF,0xE0,0x00,0x10));
détecter une image.
file_exists($filepath)
retournera un résultat vrai pour un répertoire et un chemin de fichier complet, donc ce n'est pas toujours une solution lorsqu'un nom de fichier n'est pas passé.
is_file($filepath)
ne retournera vrai que pour les chemins de fichiers complets
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 suit:
file_exists("http://www.example.com/images/")
si le répertoire/images/existe, la fonction retournera quand même 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
}
Si le chemin d'accès à votre image est relatif à la racine de l'application, il est préférable d'utiliser quelque chose comme ceci:
function imgExists($path) {
$serverPath = $_SERVER['DOCUMENT_ROOT'] . $path;
return is_file($serverPath)
&& file_exists($serverPath);
}
Exemple d'utilisation de cette fonction:
$path = '/tmp/teacher_photos/1546595125-IMG_14112018_160116_0.png';
$exists = imgExists($path);
if ($exists) {
var_dump('Image exists. Do something...');
}
Je pense que c'est une bonne idée de créer quelque chose comme une bibliothèque pour vérifier l'existence d'une image applicable dans différentes situations. Vous pouvez utiliser beaucoup de bonnes réponses pour résoudre cette tâche.