我需要一个脚本来移动一些图像,但保留资源文件名相同。
我每五分钟使用一次从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以替换当前图像。
(暂停5)
C重命名为B.
(暂停5)
X被重命名为C.
当然,这不是最好的方法....
如果你很好奇,这些是IP电话屏幕空闲图像,给用户一些变化 - 手机伸出一个固定的URL为他们的图像,因此需要保持资源文件名相同。这些文件位于Web主机上,我无法执行shell脚本。
非常欢迎您的建议。
答案 0 :(得分: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);
}
这样$ output是你给手机的路径,如果你添加一个新的图像,你可以将它添加到数组中(或者可以使用glob来查找所有文件并跳过手动数组)。
请注意,这将始终为您提供一个文件的两个副本。你的原创和输出。然后每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不存在 但是在代码结束时,它将创建文件,并且在第一次运行后所有文件都会破坏smoth。
已编辑以将方法从重命名更改为复制
答案 1 :(得分:0)
这是我最终做的,但它不符合原始问题。这就是为什么我选择了上面的答案。除了php的图像处理功能之外,我还使用了答案的方法。
这个php是图像资源,而不是静态png文件。
func numbers() -> Double {
while true {
print("enter plate height:")
if let text = readLine() {
if let num = Double(text) {
print("good! \(num)")
return num
} else {
print("Invalid number: \(text)")
}
}
}
}