Jump to content
Sign in to follow this  
silence1988

Вопрос по php

Recommended Posts

одну фишку хочу сделать и не могу кое что поправить...

 

есть кусок кода, который выводит 1,2,3,4 рандомно. А мне надо, чтобы выводил по порядку 1,2,3,4 и потом начинал по новой. Никак не догоню как тут реализовать ) В этом деле полный чайник. Если кому не сложно, буду благодарен за помощь 

$messages_array = array(
"1",
"2",
"3",
"4",
);
$rand_keys = array_rand($messages_array,1);
$raten = "$messages_array[$rand_keys]";
$statusSet = curl('https://---);

Share this post


Link to post
Share on other sites
$messages_array = array();
while(true) {
	foreach($messages_array as $raten) {
		$statusSet = curl('https://---');
	}
sleep(1);
}

 

Что-то пытается обновить страницу и в итоге ничего. Точнее страница обновляется, ставится значение 4 и все. Пытается грузить и грузить эту странцу. В итоге 4 стоит и больше ничего не ставит даже если стопанешь и снова обновишь

 

 

Этот файл ставится на крон каждую минуту. Вдруг это важно. Чтобы при каждом обращении обновляло по порядку.

Share this post


Link to post
Share on other sites

Что-то пытается обновить страницу и в итоге ничего. Точнее страница обновляется, ставится значение 4 и все. Пытается грузить и грузить эту странцу. В итоге 4 стоит и больше ничего не ставит даже если стопанешь и снова обновишь

 

 

Этот файл ставится на крон каждую минуту. Вдруг это важно. Чтобы при каждом обращении обновляло по порядку.

Sleep вобще убрать к фигам, это для теста код видать был скинут.

while(true) {

Бесконечный цикл, положит сервер на лопатки.

 

Лучше сделать таблицу в MySQL, занести значения, к примеру: 1,2,3,4 и рядом создать поле count. В поле count писать число выполнений значений 1,2.3,4. По крону просто дергать данные из базы с сортировкой по полю count и выбирать первую запись.

Это оптимальная логика для данного решения, лучше ничего не придумаете. Все эти рандомы и прочее лучше не использовать, только в крайних случаях. 

Share this post


Link to post
Share on other sites

 

на крон не подходит, ибо он зациклен

 

тогда так

$messages_array = array();

foreach($messages_array as $raten) {
    $statusSet = curl('https://---');
}

 

 

вот это уже близко. Только он за одно обновление сразу выдает 123. А мне надо чтобы один раз обновил он выдал 1 второй раз обновил 2 и третий 3. А не сразу 123 ) Может не так объснил. Тут походу без бд никак. Хз короче )

Share this post


Link to post
Share on other sites

Ладно. Спасибо за помощь всем ) С бд это явно гемор и не хочу никого напрягать из-за этого. Не критично. Думал может чисто на php можно все сделать без бд )

Share this post


Link to post
Share on other sites

Это оптимальная логика для данного решения, лучше ничего не придумаете. 

Придумал, я молодец! Текстовый файл, внутри которого выводимая цифра.

Share this post


Link to post
Share on other sites


$messages_array = array();

 

$path_to_last_i = '/tmp/cron_last_i';

$last_i = file_exists($path_to_last_i) ? file_get_contents($path_to_last_i) : 0;

 

if(!isset($messages_array[$last_i])) $last_i = 0;

$raten = $messages_array[$last_i];

$statusSet = curl('https://---');

 

file_put_contents($path_to_last_i, ++$last_i);

Share this post


Link to post
Share on other sites

Sleep вобще убрать к фигам, это для теста код видать был скинут.

while(true) {

Бесконечный цикл, положит сервер на лопатки.

 

Лучше сделать таблицу в MySQL, занести значения, к примеру: 1,2,3,4 и рядом создать поле count. В поле count писать число выполнений значений 1,2.3,4. По крону просто дергать данные из базы с сортировкой по полю count и выбирать первую запись.

Это оптимальная логика для данного решения, лучше ничего не придумаете. Все эти рандомы и прочее лучше не использовать, только в крайних случаях. 

 

лучше вам к программированию не приближаться:)

Share this post


Link to post
Share on other sites
        $messages_array = array();
        
        $path_to_last_i = '/tmp/cron_last_i';
        $last_i = file_exists($path_to_last_i) ? file_get_contents($path_to_last_i) : 0;
        
        if(!isset($messages_array[$last_i])) $last_i = 0;
        $raten = $messages_array[$last_i];
        $statusSet = curl('https://---');

        file_put_contents($path_to_last_i, ++$last_i);

 

Вот с этим не понятно, что сделать?

 $path_to_last_i = '/tmp/cron_last_i';

А так пока выводит только первое значение

Share this post


Link to post
Share on other sites

Вот с этим не понятно, что сделать?

 $path_to_last_i = '/tmp/cron_last_i';

А так пока выводит только первое значение

указать путь к файлу для записи последнего индекса с разрешением на запись для данного скрипта

Share this post


Link to post
Share on other sites

лучше вам к программированию не приближаться :)

Ага, особенно когда крон с бесконечным циклом исполняют!

 

LetSevI

Можно и так, но это не гибко.

 

Кстати, ТС а у вас реально 4 цифры он выводит? Или как я понял это просто пример?

Share this post


Link to post
Share on other sites

Ага, особенно когда крон с бесконечным циклом исполняют!

 

LetSevI

Можно и так, но это не гибко.

 

Кстати, ТС а у вас реально 4 цифры он выводит? Или как я понял это просто пример?

в первом посте ничего про крон не написано, не нужно тут умничать
цикл сделан был по запросу в первом посте "и потом начинал по новой"

Share this post


Link to post
Share on other sites

Ага, особенно когда крон с бесконечным циклом исполняют!

 

LetSevI

Можно и так, но это не гибко.

 

Кстати, ТС а у вас реально 4 цифры он выводит? Или как я понял это просто пример?

 

Это пример. Там так то текст будет выводить

Share this post


Link to post
Share on other sites

Через "опу, но все таки:

$messages_array = array(1, 2, 3, 4);

$_fid = $_id = 1;

if( isset($_GET['_id']) && intval($_GET['_id']) )
   $_id = intval($_GET['_id']);


$statusSet = curl('https://---');

$_fid++;

if( $_fid <= end( messages_array ) ){
    // как вариант
    file_get_contents( __FILE__ ) . '?_id='.$_fid;

    // как вариант 2
    include __FILE__ . '?_id='.$_fid;
}

Суть идеи думаю понятна, а так тока проснулся, мог чет не понять или не доглядеть ))

Share this post


Link to post
Share on other sites


$messages_array = array(

"1",

"2",

"3",

"4",

);

 

if (file_exists('tmp')) {

$tmp = trim(file_get_contents('tmp'));

}

else {

$tmp = 0;

}

if($tmp == count($messages_array)){

file_put_contents('tmp', 0);

$tmp = 0;

}

for ($i = $tmp; $i < count($messages_array); $i++) {

echo $messages_array[$i];

file_put_contents('tmp', $i + 1);

die;

}

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...