Hallo. ik heb onderstaande script om te controleren of een bestand bestaat. Is dit de juiste weg om te doen, en zou dit altijd werken? of zijn er alternatieven die beter zijn zonder extra bestanden op de site.


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<script>

// de direcory test dient aangemaakt te zijn met daarin het bestand somefile.txt.  dit script dient ergens in een javascript bestand te worden opgenomen. als iemand de site wilt kopieeren naar een ander domein
// dan krijg je de foutmelding geen geoorloofde site. dit komt omdat omdat de map test met daarin het bestand niet bestaat.
$.ajax({
    url:'https://mijnwebsite.nl/test/somefile.txt',
    type:'HEAD',
    error: function()
    {
        alert("niet gevonden);
    },
    success: function()
    {
        alert("gevonden");
    }
});
  

  
</script>

Je kan beter controleren op een 404 - Not Found. Zonder toegang tot die server, kan je nooit met zekerheid bepalen of een bestand wel of niet bestaat.
bedankt. maar dat is ook de bedoeling. het is de bedoeling dat het script alleen draait op de server zelf. dan zou het toch altijd moeten werken?

[size=xsmall]Toevoeging op 28/11/2024 19:12:22:[/size]

maar kan het ook zijn dat je geen toegang krijgt ook al draait het script op de server waar het bestand staat?
Als je ook extern wilt controleren of iets een 404 is, gebruik dan dit:


<?php
$handle = curl_init($url);
curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($handle);

$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
	echo "Deze site bestaat niet."; 
}

curl_close($handle);
?>


Het geeft geen 100% betrouwbaarheid, want als iemand alles wat niet bestaat doorverwijst naar een aparte pagina, en daar mist een 404-status header, dan zal dit als een 200 (OK) gezien worden. Maar als het via de webserver-deamon (Apache, Nginx, Litespeed etc..) wordt afgehandeld, dan krijg je netjes een 404 header voorgeschoteld, zoals het hoort.

Als je het lokaal op je eigen server wilt uitvoeren:

<?php
$filename = "/bla/bla/meukee.jpg";

if (file_exists($filename)) {
echo "Het bestand ".$filename." bestaat";
} else {
echo "Het bestand ".$filename." bestaat niet!";
}
?>
bedankt voor de tip. maar het moet javascript zijn. controle moet gebeuren vanuit de client kant.
Jouw code met AJAX moet gewoon werken, of anders met fetch(), gezien dat nog praktischer is.
Houd wel rekening met het feit dat als de website geen CORS toestaat, dat de anvraag zal mislukken.

Serverside is daarom een stuk betrouwbaarder.
bedankt. fetch ben ik niet bekend mee. cors is dat van toepassing op fetch? of ook op ajax? wat is cors precies?
cors is toch alleen van toepassing wanneer je controle wilt uitvoeren op een ander domein? dus stel domein A wil controleren of op domein B een bestand bestaat. dan zou je op domein B cors moeten instellen toch?

Cors is toch niet nodig op hetzelfde domein?
Klopt, de externe domein moet CORS gebruiken.
En is het nog gelukt hiermee?

Reageren