Нужна помощь с include

FlashBack

Супер -человек
Регистрация
7 Май 2007
Сообщения
317
Реакции
55
Нужна помощь, в php я нуб, ниже найденный мной скрипт, он вставляет
рандомную строку из file.txt
Код:
<?
$data = file("http://site/file.txt");
$total = count($data);
srand(double)microtime()*1000000);
$mn = 1; // min
$mx = 2; // max
$text = "";
for($i=0; $i<mt_rand($mn,$mx); $i++) {
 $s = mt_rand(0,$total-1);
 $text .= "".$data[$s];
 }
 echo "$text";
 ?>

подгружается в шаблон includ'ом:

Код:
<?php include ("filename.php"); ?>

но ничего не происходит(

что делаю не так или может где ошибка в скрипте?

Заранее спасибо за помощь.
 
код хоть и ужасный начала 2000 года и пхп3, но вродь работать должен. Но всё же использовать лучше более приличные методы например
Скрытое содержимое доступно для зарегистрированных пользователей!

к примеру
PHP:
function getRandomStr($file){
 
         $data = file( $file ); 
         $total = count($data); 
 
          $s = mt_rand(0, $total-1); 

  return  trim($data[$s])  ;
}
в шаблоне написать
<?php echo getRandomStr($file); ?>
 
KillDead - почему пользуешь count(), а не sizeof()?
 
KillDead - почему пользуешь count(), а не sizeof()?

потому что sizeof вернет размер файла
а count - кол-во элементов в массиве
надо ли говорить что функция file на выходе отдает массив, состоящий из строковых данных (в отличие от file_get_contents, возвращающей файло цельным куском)?
 
потому что sizeof вернет размер файла
а count - кол-во элементов в массиве
надо ли говорить что функция file на выходе отдает массив, состоящий из строковых данных (в отличие от file_get_contents, возвращающей файло цельным куском)?
Неа, мимо, читай маны, если не веришь прочитанному пробуешь на практике.

p.s.: thoth777 подогнал блин, перепугался думал уже начал функции путать, и пора на пенсию, шутник елки пали. Но видимо функции путаю не я ;).
 
Неа, мимо, читай маны, если не веришь прочитанному пробуешь на практике.
p.s.: thoth777 подогнал блин, перепугался думал уже начал функции путать, и пора на пенсию, шутник елки пали. Но видимо функции путаю не я ;).

отнюдь.
внимательно читните тему: ТС надо "рандомную строку из file.txt"

и да, предложу ТС свой вариант кода, как это сделал бы я.



$data = file("http://site/file.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
$total = count($data);

$mn = 1; // min
$mx = 2; // max
$i=mt_rand($mn,$mx);
$text = "";
while ($i>0){
$shuffle($data);
$s = $data[0];
$text .= $data[$s];
$i--;
}
echo $text;

если важно чтобы строки не повторялись
то можно вместо
shuffle($data);
$s = $data[0];

использовать
$s = array_shift($data);

а shuffle($data); закинуть до начала блока while



оч важная херь, которой незаслуженно пренебрегают: FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES
тута описалово:



ЗЫ. за конструкции типа echo "$text"; надо бить программиста клавиатурой по рукам!

ззы
не работать может еще вот что:

Для функции file вы можете использовать URL в качестве имени файла, если была включена опция fopen wrappers. Смотрите более подробную информацию об определении имени файла в описании функции fopen().
 
2trooll
действительно, хотя написано что This function is an alias of: count(). но sizeof быстрее работает. Но разница такая, что не особо можно и волноваться на этот счёт.
2thoth777 скопировал выше что такое функция sizeof их мана пхп. Дельное замечание насчёт флажков. Вообще ,в идеале я бы советовал сделать
1)Если мы берём постоянно строку из файла, то файл нужно нормализовать, те привести к виду, коорый не надо будет каждый раз парсить на пустые строки и тп
2) shuffle($data); будет вести себя неоправданно медленно для больших файлов даже если он один.
3) предусмотреть многократный вызов функции, а то сейчас файл постоянно открывается.
 
KillDead, отнюдь:
sizeof работает не быстрее и не медленнее чем count

про shuffle замечание верное (тормоза при большом объеме)

берем array_rand
Выбирает одно или несколько случайных значений из массива. Возвращает ключ (или ключи) данных случайных элементов.

соответственно юзаем его

$r=array_rand($data,1);
 
KillDead, отнюдь:
sizeof работает не быстрее и не медленнее чем count
про shuffle замечание верное (тормоза при большом объеме)
берем array_rand
соответственно юзаем его
$r=array_rand($data,1);
Нет, нет, отнюдь. Если честно хз как в новых версиях >5.3, не тестил, но вы видели что я написал?
хотя написано что This function is an alias of: count(). но sizeof быстрее работает.
ненамного но быстрее. Хотя и является зеркалом. Либо у всех поголовно погрешность измерений была выше в сторону sizeof...

+ array_rand тоже хорошо, но если массив не менялся я бы предложил запомнить количество элементов в массиве, а затем выбирать случайное mt_rand
НО , для тз скорость не играет большой роли, тк не думаю что именно этот кусок будет тормазить. А если он занимает всего ~1% времени генерации- оптимизировать его не нужно.
 
Либо у всех поголовно погрешность измерений была выше в сторону sizeof...
простите, но у кого "у всех"?

фразами "давно известно", "все говорят" можно предварить любую чушь.

а если я заявлю что "все говорят что вы безбожно обманываете, утверждая что sizeof выполняется быстрее чем count", например?

и да, у меня есть чем доказать.


PHP:
<?php
srand(time());
$test=array();
for ($i=0; $i<1000; $i++){
$test[]=rand(0,1000);
}

$iterations=200;

echo "Count\n";
$now=microtime(true);
for ($a=0; $a<$iterations; $a++){
	for ($b=0; $b<$iterations; $b++){
		for ($c=0; $c<$iterations; $c++){
			if (count($test)<2){echo "test";}
		}
	}
}
$andnow=microtime(true);
echo $andnow-$now."\n--------------------\n";

echo "Sizeof\n";
$now=microtime(true);
for ($a=0; $a<$iterations; $a++){
	for ($b=0; $b<$iterations; $b++){
		for ($c=0; $c<$iterations; $c++){
			if (sizeof($test)<2){echo "test";}
		}
	}
}
$andnow=microtime(true);
echo $andnow-$now."\n--------------------\n";
?>


этот пассаж:
if (sizeof($test)<2){echo "test";}
добавлен на случай какого-либо оптимизатора, смотрящего неиспользуемые вычисляемые данные.
echo "test" естественно выполняться не будет :)


вот что мой скрипт показал (запускал несколько раз, менял местами проверку для count и sizeof)

Count
13.442732095718
--------------------
Sizeof
13.53715801239
--------------------

но в одном вы правы: count и sizeof неравнозначны по времени выполнения.

век живи, век учись, например.
 
Назад
Сверху