2017-07-03 35 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); 

?> 
相關問題