2017-07-03 56 views
-1

我需要一个脚本来对某些图像进行随机播放,但保留资源文件名相同。在保持文件名不变的情况下将文件同步

我正在使用以下每5分钟从cron作业调用的PHP脚本。它有效,但不雅。

<?php 

rename("/www/images/vvx300-background.png", "/www/images/vvx300-background-X.png"); 

sleep(5); //a precaution I guess 

rename("/www/images/vvx300-background-B.png", "/www/images/vvx300-background.png"); 

sleep(5); 

rename("/www/images/vvx300-background-C.png", "/www/images/vvx300-background-B.png"); 

sleep(5); 

rename("/www/images/vvx300-background-X.png", "/www/images/vvx300-background-C.png"); 

?> 

所以,有3个图像:
当前图像移动到X. (暂停5) B被移动到替换当前图像。 C被重命名为B. (停顿5)(5暂停) X更名为C.

当然,这不是要做到这一点的最好办法....

如果你是好奇的是,这些IP电话屏幕上的空闲图像给用户带来了一些变化 - 手机会为他们的图像伸出一个固定的URL,因此需要保持资源文件名相同。这些文件位于Web主机上,我无法执行shell脚本。

您的建议非常受欢迎。

+0

一种方式可以是使用一个数组的所有图像路径,然后复制粘贴(并覆盖)“输出图像” – Andreas

+0

你能充实你的建议? –

+0

我刚才写了答案,写完后我看到你的评论:-)我只是等待,直到我起床 – Andreas

回答

0

只是给你一个想法我的意思是在评论。

$output = "/www/images/vvx300-background.png"; 
$files = array("/www/images/vvx300-background-A.png", "/www/images/vvx300-background-B.png", "/www/images/vvx300-background-C.png", "/www/images/vvx300-background-D.png"); 

Foreach($files as $file){ // or foreach(glob("/www/images/*.png") as $file){ 
    Copy($file, $output); 
    Sleep(5); 
} 

这样$输出是您为手机路径,如果添加新的图像,你可以在阵列中添加它(或者可能使用水珠找到的所有文件,并跳过手动阵列)。

请注意,这会一直给你一个文件的两个副本。你的原创和输出。然后每5秒更换一次输出图像。

编辑我现在看到你的五秒延迟不是在手机上交换图像。

此方法将保存一个txt文件与当前使用的图像,然后转到下一个。

$output = "/www/images/vvx300-background.png"; 
$files = glob("/www/images/*.png"); 
$current = file_get_contents("current.txt"); // change path to suit. reads current image index 

if(!isset($current) || $current == count($files)-1) { 
    Copy($files[0], $output); 
}else{ 
    Copy($files[$current+1], $output); 
} 

file_put_contents("current.txt", $current+1); // saves the index of the current image used. 

当您第一次运行该代码就会生成监守文件current.txt的警告不存在。
但是在代码结束时它会创建文件,并且在第一次运行后所有文件都将被破坏。

编辑从命名改变方法复制

+0

感谢您的回答。但是,我必须误解你的建议。您的代码会重命名每个文件vvx300-background.png,从而有效地删除其他文件。我期待做的是依次循环访问每个图像,将它们的名称更改为vvx300-background.png,同时保留图像文件。 –

+0

@迈克尔是正确的。我的建议是有一个文件名只是暂时的。您希望保留的所有文件都称为...- A或-B等等。仅被称为背景的那个将是将要​​展示的那个。因为......等等......现在我明白我的错误了。它不应该重命名()它应该是copy()。所以基本上,A,B,C等都是原创的,背景是每次运行php文件时都会被替换的副本。 – Andreas

+0

@迈克尔是我的答案仍然无法正常工作?这个想法是保持以A,B,C等结尾的文件,并通过复制和替换替换名为background的文件。 – Andreas

0

这正是我终于做到了,但它不会与原来的问题符合。这就是我选择上面的答案的原因。除了php的图像处理函数之外,我还使用了该答案的方法。

这个php是图像资源,而不是静态PNG文件。

<?php 

$files = glob("images/*.png"); 
$current = file_get_contents("current.txt"); 

if (count($files) <= $current) { 
    $current = 1; 
} else { 
    $current++; 
} 

$im = imagecreatefrompng("images/".$current.".png"); 

header('Content-Type: image/png'); 
imagepng($im); 
imagedestroy($im); 

file_put_contents("current.txt", $current); 

?> 
相关问题