2017-08-29 49 views
1

我只在Web服務器上的特定文件被刪除時才試圖在HTML頁面上顯示下載按鈕。我以爲我會使用一個CSS display: none;然後PHP腳本while循環會看起來像這樣的:服務器上存在文件時不要顯示按鈕

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

的事情是,我不知道該怎麼辦這最後一步,每一個線程我已經看到關於使用PHP修改CSS不適用於我的用例。

+0

那是因爲你的PHP是在你的服務器執行,並且CSS是由客戶端渲染的。 –

+0

睡覺只是延遲了這段時間對客戶的響應。這沒有意義。如果文件永遠不會被刪除,那麼你的網頁將永遠不會得到迴應,並且會超時。你應該做的是,如果該文件在請求時存在,則顯示該按鈕。如果不是,不要顯示它。如果用戶按下按鈕,請再次檢查文件的狀態。如果它在被渲染的按鈕和從用戶返回的請求之間的時間內被刪除,只要返回一個錯誤或警告,無論適用於您的用例。 – ADyson

+2

您可以對服務器端腳本執行ajax調用,告訴您文件是否存在,然後根據響應添加/刪除類 – Pete

回答

0

PHP執行顯示在屏幕上的任何東西之前,所以你可能不會是能夠做到這一點:代碼會簡單地睡5,然後在顯示給用戶之前繼續生成剩餘的html。

你可能想要做的是將按鈕標記爲display:none,然後當頁面加載完成時,會有一個js函數調用一個php頁面來返回文件是否存在。讓js函數循環,直到php頁面顯示文件消失,然後讓js函數顯示按鈕並停止循環。

<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> 

那麼你的文件檢查PHP可以類似於你有什麼東西:

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

正是我在找的。完美工作,謝謝! ;) –

0

剛剛建立的按鈕,像這樣一類的隱藏:

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

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

爲什麼不只是'if(file_exists(「path」)){echo「< input type ='button'class ='$ class'name ='stuff'> woo「;}'? – Martijn

+0

如果你這樣做,不需要上課,但那是另一種方式。但使用PHP,有50種方法可以完成一件事。 – clearshot66

相關問題