【发布时间】:2016-04-15 14:03:58
【问题描述】:
当前设置: 在同一个 PHP 文档中,我有一个 PHP randomizer 函数和调用该函数的 HTML——一个单独的 txt 文档,其中包含由 php 函数调用的字符串:
功能
<?php
function rand_line($fileName, $maxLineLength = 4096) {
$handle = @fopen($fileName, "strings.txt");
if ($handle) {
$random_line = null;
$line = null;
$count = 0;
while (($line = fgets($handle, $maxLineLength)) !== false) {
$count++;
if(rand() % $count == 0) {
$random_line = $line;
}
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
fclose($handle);
return null;
} else {
fclose($handle);
}
return $random_line;
}
}
?>
我在 HTML 中调用函数:
<?php echo rand_line("strings.txt");?>
<input type="button" value="Another String" onClick="window.location.reload()">
当多个用户访问页面并按下按钮以获得新状态时,这往往会很慢。
我想要达到的目标:
提高性能并使整个事情不那么繁重:也许随机化器过于复杂,例如我可以使用 AJAX 调用,但如果可能的话,将字符串列表保留在 strings.txt 文件中并与 PHP 脚本分开和 HTML。
对不起,如果我不知道我在说什么……我不是一个熟练的程序员。只是一个偶尔把东西拼凑在一起的人:)
【问题讨论】:
-
您是否可以接受将函数和 HTML 代码分开的答案?
-
strings.txt一直在变化吗?在那,它是一个永远不会改变的 static 文件吗?或者文件是否不断更新新的字符串?文件中有多少行/*字符串*? -
请参阅this answer 以获得从文件中获取随机行的更有效的示例,假设您的文件不是非常大(怀疑您会在用例中遇到内存问题)。您这样做的算法确实相当迂回,进行了不必要的迭代(至少可以在找到某些东西时停止),并且每次迭代都进行不必要的工作(每次新的随机数,检查是否可与行号整除......)跨度>
-
@PatrickGregorio 是的,当然:)
-
@Marcus 它可能会改变,最终可以添加新的字符串。目前该文件有大约 15 个字符串,但我认为它永远不会达到 100。
标签: javascript php jquery html ajax