2016-05-12 4 views
0

С моими ограниченными навыками HTML я взломал грубую часть кода, чтобы выполнить простую задачу. У меня есть малина Pi, работающая на веб-сервере Apache. На мониторе Pi мне нужно отобразить изображение. Иногда мне нужно будет изменить это изображение удаленно, перейдя, по крайней мере, на пару десятков изображений.Сложность Пытается обновить страницу с помощью PHP

Прямо сейчас в том же каталоге у меня есть страница изображения, четыре .jpg файла и страница выбора, чтобы выбрать изображение, которое я хочу. Я потянул это на другой компьютер в той же сети. Единственный способ понять, как передать изображение, которое я хочу, - это записать его в текстовый файл. Таким образом, страница выбора имеет простую веб-форму с некоторыми переключателями и кнопкой отправки. Вы выбираете число от 1 до 4, нажимаете submit, и он просто записывает этот номер в текстовый файл. Эта часть работает.

Страница изображения открывает текстовый файл, считывает номер и привязывает его к тегу img src. Я сделал простой цикл, который обновлял страницу каждые 5 секунд, и это работало нормально. Я могу изменить текстовый файл, и через несколько секунд страница перезагрузится с новым изображением. Потрясающие.

Итак, я попытался добавить немного дополнительного кода с мыслью, что вместо обновления каждые 5 секунд вместо этого будет проверяться каждые 5 секунд, чтобы узнать, отличается ли число в текстовом файле.

Что-то о моем коде janky, потому что в первый раз, когда я загружаю его, ничего не происходит. Анимация загрузки браузера идет так, я предполагаю, что код начал цикл, но если он дошел до этого, почему он не загрузил изображение первым? Он будет сбрасываться, пока я не перейду на страницу выбора, чтобы изменить текстовый файл. В этот момент он загрузит изображение, но загрузит номер, который был ранее в текстовом файле, а не текущий. Он работает так каждый раз, всегда меняясь на предыдущий номер, а не на текущий.

Я уверен, что это что-то немое, что я не понимаю, потому что мои навыки кодирования сосут. Кто-нибудь видит вопиющую ошибку?

<?php 
    $file = fopen("hints.txt","r"); 
    $theData = fread($file,2); 
    fclose($file); 
?> 

<img width=533 height=355 src="<?php echo $theData?>.jpg"><br> 

<?php 
    do{ 
     sleep(5); 
     $file2 = fopen("hints.txt","r"); 
     $theData2 = fread($file2,2); 
     fclose($file2); 
    } while ($theData == $theData2); 
    header("Refresh:0"); 
?> 
+0

Это что-то о том, как загружается фактическая страница, не так ли? В моей голове я предполагаю, что он делает первый фрагмент кода PHP, затем загружает изображение, затем делает второй фрагмент кода PHP, но это не должно быть так, как браузер анализирует код. Сначала он пытается сделать все PHP-код, поэтому он зацикливается в цикле сразу перед загрузкой изображения. –

ответ

0

Echo немного JavaScript, чтобы сделать это, как я помню заголовки могут быть использованы только до содержимого помещается на страницу.

<?php echo "<script>window.location.reload();</script>"; ?> 
0

Ваш код PHP пытается сгенерировать страницу для браузера, а потому, что у вас есть цикл внутри, он будет висеть, пока данные изменения

Вместо этого, вы должны опрашивать hints.txt файл с JavaScript ajax-запросы и обновить источник img с клиентской стороны. Что-то вроде:

<!-- load source first time from file with php --> 
<img width=533 height=355 id="image" src="<?php echo $theData?>.jpg" /> 


<script type="javascript"> 
window.setInterval(function(){ 
    //create ajax request object, not useful for IE 
    var xhttp = new XMLHttpRequest(); 

    //you may want to change URL to this file 
    xhttp.open("GET", "hints.txt", true); 

    xhttp.onreadystatechange = function() { 
    if (xhttp.readyState == 4 && xhttp.status == 200) { 
     console.log(xhttp.responseText); //see what response was 

     //change image attribute 
     document.getElementById("image").src = xhttp.responseText + '.jpg'; 
    } 
    }; 
    xhttp.send(); 

//update every 5 sec 
},5000); 
</script> 
+0

Итак, я скопировал ваш код на свою страницу, и он не сработал. Я хотел попробовать и выяснить, что происходит, поэтому я начал подключать каждый элемент, который я не понял в w3schools.com, и читать о том, что происходит. После долгих разборок и сравнения с примерами, которые я видел, единственное, что я видел, было другое: в вашем случае вы использовали тип = javascript, и они этого не сделали. Поэтому я удалил его. И он отлично работает. Огромное спасибо за помощь. Я очень ценю это! –

Смежные вопросы