2017-07-03 22 views
-1

イメージの周りをシャッフルするスクリプトが必要ですが、リソースファイル名は同じです。ファイルをシャッフルしてファイル名を同じに保ちます

私は5分ごとにcronジョブから呼び出される以下のPHPスクリプトを使用しています。それはうまくいくが、控えめである。
現在の画像がX. に移動される(5を一時停止) Bは、現在の画像を置き換えるために移動される。

<?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個のイメージがあります。 CはB. に変更され (一時停止5)(一時停止5)あなたがいる場合は確かにこれは、これを行うための最善の方法ではありませんXは

C.

に変更され ....

不思議なことに、これらはIP電話画面のアイドルイメージで、ユーザーに多種多様な情報を提供します。電話は画像の固定URLに届くため、リソースファイル名を同じに保つ必要があります。ファイルはWebホスト上にあり、シェルスクリプトは実行できません。

あなたの提案は大歓迎です。

+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); 
} 

この方法では、$出力は、あなたが電話に与え、そしてあなたが新しいイメージを追加する場合は、配列にそれを追加(あるいはすべてのファイルを検索し、手動で配列をスキップするグロブを使用)できるパスです。

これは常に1つのファイルの2つのコピーを与えることに注意してください。あなたのオリジナルと出力。次に、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 becuase警告が存在しません生成されます。
しかし、コードの最後にファイルが作成され、最初の実行後にすべてがスモスを台無しにするでしょう。

+0

あなたの答えをありがとう。しかし、私はあなたの提案を誤解しているはずです。あなたのコードは、各ファイルvvx300-background.pngの名前を変更して、他のファイルを効果的に削除します。私がやってみたいのは、各画像を順番に調べ、画像ファイルを保存しながら名前をvvx300-background.pngに変更することです。 –

+0

@マイケルは正しいです。私の提案は、ちょうど一時的な1つのファイル名を持つことです。保存したいファイルはすべて...- 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); 

?> 
関連する問題