PHP + Ajax,从网络摄像头获得新鲜的图像


PHP + Ajax, get fresh image from webcam

我似乎无法在Linux服务器上工作。在WAMP上,这工作得很好。

基本上,我已经设置了一个网络摄像头,它每60秒上传图像到FTP服务器上的文件夹。然后,我创建了一个站点,在这里我调用Ajax来扫描这个文件夹并获得最后一张图像(基于创建时间)。

当我访问页面时,确实加载了最新的图像,CHMOD设置正确。但是当我在页面上等待时,调用新的ajax请求并返回图像总是相同的,即使已经在FTP上上传了新图像-这些新图像被跳过,也没有设置CHMOD。

我不知道是什么问题。

这是我的:

index . php :

<img id='webcam-img' alt='Webkamera' src='' />
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<script language="JavaScript" type="text/javascript">
function getImage() {
    var src = '';
    $.ajax({
        url: "ajax-get-webcam-image.php",
        async: false,
        success: function(data){
          src = data;
        }
    });
    return src;
}
function updateImage() {
    var src = getImage();
    $("#webcam-img").attr("src", src + "?timestamp=" + new Date().getTime());
    setTimeout(updateImage, 5000);
}
updateImage();
</script>

ajax-get-webcam-image.php :

<?php
$folder = "images/webcam"; // the folder with images
function getImages($dir) {
    $allFiles = scandir($dir);
    $files = array_diff($allFiles, array('.', '..'));
    foreach ($files as $f) {
        chmod($dir . '/' . $f, 0644); // uploaded images are set to 0640 and can't be read on a page. Must set CHMOD to 644
    }
    $ignored = array('.', '..');    // ignore this
    $files = array();
    foreach (scandir($dir) as $file) {
        if (in_array($file, $ignored)) continue;
        $files[$file] = fileatime($dir . '/' . $file);
    }
    $files = array_keys($files);    // sort images
    $files = array_reverse($files);
//     foreach ($files as $k => $file) {
//         if ($k > 9) {               // delete old images, leave 10 freshest on server
//             unlink(__DIR__ . '/' . $dir . '/' . $file);
//         }
//     }
    return ($files[0]) ? $files[0] : false; // return freshest image
}
$img = getImages($folder);
echo $folder . '/' . $img;
?>

谢谢你的提示!

好的,所以这是一个缓存问题,所以我修改了ajax调用添加t=" + new Date().getTime()到url参数:

function getImage() {
    var src = '';
    $.ajax({
        url: "ajax-get-webcam-image.php?t=" + new Date().getTime(),
        async: false,
        success: function(data){
          src = data;
        }
    });
    return src;
}