PHP / Curl在两个标签之间随机化文本

时间:2014-02-20 23:50:28

标签: php random

下面是我的工作代码,它从远程位置提取文本文件,并将特定行插入到页面的html正文中。代码工作正常,就像现在一样。我想对代码做一个补充,然后让它随机化它得到的行。这是我想要做的。

正在提取的文本文件将包含不同数量的行。只有一行通过echo $lines[0];选择,它告诉我们要去哪一行。该行的格式将如下..

<p>This is a line of text <a href="http://domain1.com">domain 1</a>. This is a line of text.</p><p>This is a line of text <a href="http://domain2.com">domain 2</a>. This is a line of text.</p><p>This is a line of text <a href="http://domain3.com">domain 3</a>. This is a line of text.</p>

所有这些都是一行并被拉入页面的html。上面的示例将显示3段文本,其中包含上述顺序中的链接。

我想要做的是让<p>..</p>之间的文本行随机化,例如,如果我将以下代码放在站点A上,输出将按域1的顺序排列,然后是域2,然后是域3.如果我将代码放在Site BI上,则希望它是域3,然后是域1,然后是域2.要以随机顺序显示它们,而不是每次将代码放在站点上的确切顺序。

我不知道是否需要在我有代码的网站上存在某种缓存以记住要显示的随机顺序。这就是我想要的。我不希望每次加载页面都有随机顺序。

我希望这是有道理的。如果没有,请告诉我,以便我可以尝试更好地解释它。这是我现在的工作代码。任何人都可以帮我搞定这个吗?非常感谢你的帮助。

<?php
function url_get_contents ($url) {
    if (function_exists('curl_exec')){ 
        $conn = curl_init($url);
        curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($conn, CURLOPT_FRESH_CONNECT,  true);
        curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1);
        $url_get_contents_data = (curl_exec($conn));
        curl_close($conn);
    }elseif(function_exists('file_get_contents')){
        $url_get_contents_data = file_get_contents($url);
    }elseif(function_exists('fopen') && function_exists('stream_get_contents')){
        $handle = fopen ($url, "r");
        $url_get_contents_data = stream_get_contents($handle);
    }else{
        $url_get_contents_data = false;
    }
return $url_get_contents_data;
}
?>

<?php
$data = url_get_contents("http://mydomain.com/mytextfile.txt");
if($data){
$lines = explode("\n", $data);
echo $lines[0];
}
?>

4 个答案:

答案 0 :(得分:1)

试试这个

$str = '<p>This is a line of text <a href="http://domain1.com">domain 1</a>. This is a line of text.</p><p>This is a line of text <a href="http://domain2.com">domain 2</a>. This is a line of text.</p><p>This is a line of text <a href="http://domain3.com">domain 3</a>. This is a line of text.</p>';

    preg_match_all('%(<p[^>]*>.*?</p>)%i', $str, $match);

    $count = 0;
    $used = array();
    while ($count < 3) {
        $index = rand(0, 2);
        if (!isset($used[$index])) {
            $used[$index] = 1;
            echo $match[0][$index];
            $count++;
        }
    }

答案 1 :(得分:1)

我想我明白你在问什么,但如果没有,请告诉我,我会调整。

基本上,我在这里做的是计算你爆炸的数组中的行数,然后使用它作为随机化的最大数字。一旦我有一个随机数,那么我只是访问该文件数组的那一行。因此,如果我生成数字5,那么它将从数组中获取第5行。

$lines = explode("\n", $data);
$line_count = count($lines) - 1;

for ($i = 0; $i < 3; $i++) {
    print "<p>".$lines[get_random_line($line_count)]."</p>";
}


function get_random_line($line_count) {
    mt_srand(microtime() * 1000000);
    $random_number = rand(0, $line_count);
    return $random_number;
}

答案 2 :(得分:1)

如果没有过多修改代码而没有在数据库中存储值,使用平面文件存储可以执行以下操作:

创建一个名为“count.txt”的文件,并将其放在与php文件相同的位置。

<?php
function url_get_contents ($url) {
    if (function_exists('curl_exec')){ 
        $conn = curl_init($url);
        curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($conn, CURLOPT_FRESH_CONNECT,  true);
        curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1);
        $url_get_contents_data = (curl_exec($conn));
        curl_close($conn);
    }elseif(function_exists('file_get_contents')){
        $url_get_contents_data = file_get_contents($url);
    }elseif(function_exists('fopen') && function_exists('stream_get_contents')){
        $handle = fopen ($url, "r");
        $url_get_contents_data = stream_get_contents($handle);
    }else{
        $url_get_contents_data = false;
    }
return $url_get_contents_data;
}

$data = url_get_contents("http://mydomain.com/mytextfile.txt");

$fp=fopen('count.txt','r');//Open count.txt for reading
$count=fread($fp,4) ? $count++ : $count=0;//Get and increment $count (4=no. bytes to read)
fclose($fp); //Close file

if($data){
$lines=explode("\n",$data);
if($count>count($lines)){$count=0;}//Reset $count if more than available lines
echo $lines[$count];

$fp=fopen('count.txt','w'); //Another fopen to truncate the file simply
fwrite($fp,$count); //Store $count just displayed
fclose($fp); //Close file
}
?>

答案 3 :(得分:0)

听起来您真正想要一种获得独特内容的方式,或者也可能看到HTML页面上更新内容的外观。这对我来说非常有用,我相信很多人也会喜欢它,即使它与你想要做的有点不同。

这将从文本文件中获取嵌套的Spintax。然后它会旋转内容并显示在您的页面中。您的页面需要是.php,但是有一种方法可以在我使用它的HTML页面上工作。

Spintax例子:{cat | Dog | Mouse}适用于句子旋转,旋转/旋转图像,旋转HTML代码等......你可以用很多东西做这件事。

<?php
function spin($s){
preg_match('#\{(.+?)\}#is',$s,$m);
if(empty($m)) return $s;

$t = $m[1];

if(strpos($t,'{')!==false){
    $t = substr($t, strrpos($t,'{') + 1);
}

$parts = explode("|", $t);
$s = preg_replace("+\{".preg_quote($t)."\}+is",                    
$parts[array_rand($parts)], $s, 1);

return spin($s);
  }


$file = "http://www.yourwebsite/Data.txt";
 $f = fopen($file, "r");
while ( $line = fgets($f, 1000) ) {
echo spin($line);
}





?>