2017-08-29 4 views
1

J'essaie d'afficher un bouton de téléchargement sur une page HTML uniquement lorsqu'un fichier spécifique sur le serveur Web est supprimé. Je pensais que j'utiliser un CSS display: none; puis un script PHP avec une boucle while qui regarderait comme ceci:Ne pas afficher un bouton alors que le fichier existe sur le serveur

while (file_exists("/aaa/file.txt")) { 
     sleep(5); 
    } 
//set display property of the invisibleLink class to block and continue 

La chose est que je ne sais pas comment faire cette dernière étape et chaque thread je J'ai vu sur la modification de CSS avec PHP ne fonctionne pas avec mon cas d'utilisation.

+0

C'est parce que votre PHP est exécuté sur votre serveur et le CSS est rendu par le client. –

+0

mettre un sommeil dans juste retarde la réponse au client de ce laps de temps. Cela n'a aucun sens. Si le fichier n'est jamais supprimé, votre page ne recevra jamais de réponse et expirera. Ce que vous devez faire est, si le fichier existe au moment de la demande, afficher le bouton. Sinon, ne le montre pas. Si l'utilisateur appuie sur le bouton, vérifiez à nouveau l'état du fichier. Si elle a été supprimée entre le moment où le bouton a été rendu et la requête qui revient de l'utilisateur, renvoyez simplement une erreur ou un avertissement, selon ce qui est approprié pour votre cas d'utilisation. – ADyson

+2

Vous pouvez faire un appel ajax à un script côté serveur qui vous indique si le fichier existe ou non, puis ajouter/supprimer une classe en fonction de la réponse – Pete

Répondre

0

PHP exécute avant tout est affiché sur l'écran, de sorte que vous n'êtes probablement pas allez être en mesure de le faire: le code serait dormez simplement 5 et continuez à générer le reste du code HTML avant de l'afficher à l'utilisateur. Ce que vous pouvez faire à la place est de marquer le bouton comme display: none et puis quand la page est chargée, avoir une fonction js qui appelle une page php qui retourne si le fichier existe ou pas. Avoir la fonction js en boucle jusqu'à ce que la page php indique que le fichier est parti, puis avoir la fonction js afficher le bouton et arrêter la boucle.

<button type="button" id="test_btn" style="display: none;">Download</button> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     checkFile(); 

     function checkFile() { 
      $.ajax({ 
       url: '/path/to/file_checker.php', 
       type: 'GET', 
       success: function (data) { 
        if (data === "deleted") { // or whatever you want the response to be 
         $('#test_btn').show(); 
        } 
        else { 
         checkFile(); // you can add a setTimeout if you don't want this running too often 
        } 
       } 
      }); 
     } 
    } 
</script> 

Ensuite, votre fichier php vérificateur peut être quelque chose de semblable à ce que vous aviez:

if (file_exists("/aaa/file.txt")) { 
    echo "exists"; 
} 
else { 
    echo "deleted"; 
} 
+0

Juste ce que je cherchais. Travailler parfaitement, merci! ;) –

0

Il suffit de construire le bouton et le cacher avec une classe comme ceci:

<style> 
.hidden{ display:none;} 
</style> 

<?php 
if(!file_exists("path")){ $class = "hidden" } 
    echo "<input type='button' class='$class' name='stuff'>woo</button>"; 
?> 
+0

Pourquoi ne pas simplement 'if (file_exists (" path ")) {echo" < input type = 'button' class = '$ class' name = 'truc'> woo "; – Martijn

+0

Pas besoin d'une classe si vous le faites de cette façon, mais c'est une autre façon oui. Mais avec PHP, il y a 50 façons de faire une chose. – clearshot66