Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css 指向随机图像的URL_Css_Url_Image - Fatal编程技术网

Css 指向随机图像的URL

Css 指向随机图像的URL,css,url,image,Css,Url,Image,我想做一些我在web开发中没有见过的事情,但这似乎是可能的我想要一个可以放入任意HTML标记或CSS背景图像属性的URL,当访问该属性时,它是一个随机图像。我不希望页面指向或重定向到随机图像,也不希望它显示或嵌入随机图像,因为这些东西不符合上述要求。我见过使用Javascript在网页中显示随机图像以交换属性或隐藏元素的解决方案,但这必须使整个页面成为图像,没有前面或后面的二进制或ASCII数据。我希望它能被那些对编程一无所知的人使用。我的目标是这样的: http://example.com/r

我想做一些我在web开发中没有见过的事情,但这似乎是可能的我想要一个可以放入任意HTML
标记或CSS
背景图像
属性的URL,当访问该属性时,它是一个随机图像。
我不希望页面指向或重定向到随机图像,也不希望它显示或嵌入随机图像,因为这些东西不符合上述要求。我见过使用Javascript在网页中显示随机图像以交换属性或隐藏元素的解决方案,但这必须使整个页面成为图像,没有前面或后面的二进制或ASCII数据。我希望它能被那些对编程一无所知的人使用。我的目标是这样的:

http://example.com/randomImage/
理论上,每次在CSS或HTML中加载带有此URL的页面时,引用元素中将显示一个随机图像。这样,如果您有多个
元素,或者有多个元素的
背景图像
引用此页面,则它们都应随机显示不同的图像

我的第一个想法是使用PHP(在下面描述的结构中)查看特定目录,随机选取一个图像文件,并回显其二进制数据如果这是可能的,那么我将如何着手进行?如果没有,那么还有人有其他想法吗?

作为伪代码,我的主要想法是:

<?PHP
$chosenImage = getRandomFileFrom("./rand/");
$bytes = readFileAsBinary($chosenImage);
foreach($bytes as $byte){
    echo $byte;
}
?>


我不在乎真随机或伪随机。它可以循环每一次为所有我关心;在这项工作中,我所需要的是多个图像可以作为一个URL引用

您当然可以用PHP实现这一点

首先,选择一个随机文件(请参见)

然后可以使用PHP
readfile
函数将其发送给用户。您可以在这里详细阅读:参见示例1,我在下面对其进行了略微修改:

function outputImage( $filename ) {
    header('Content-Description: File Transfer');
    header("Content-type: image/jpeg");
    header('Content-Disposition: attachment; filename='.basename($filename ));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filename ));
    ob_clean();
    flush();
    readfile($filename );
    exit;
}
然后把它们放在一起:

// Get a filename
$filename = random_pic();

// Check that a file was found
if (!$filename) {
    header('HTTP/1.0 404 Not Found');
    die();
}

// Output the image
outputImage( $filename );
您还可以更改
$files=glob($dir./*.jpg')
查找不同的图像格式,但您还必须更改
输出图像
以检测格式,并将
内容类型
类型标题设置为
图像/jpeg
图像/png

如果您只提供一种类型的图像,那么您可以将Apache设置为处理对PHP脚本的“randomImage.jpg”请求,然后客户端浏览器将完全不明智。要了解更多信息,请查看Apache重写规则(尽管您当然会做相反的操作):


我还没有测试过这段代码,但它应该可以正常工作。希望有帮助

您正在运行Apache吗?有一个Apache模块处理这种事情

看起来没问题,但您可以使用
fpassthru
读取所有字节,并更高效地将它们写入输出。另外,请记住正确设置内容类型标题:)如果您知道如何执行此操作,可以将其作为答案发布吗?抱歉,太忙了,但您的思路是正确的。不,我使用的是ASP.NET。不过,谢谢!我会记住,如果我切换:3我正在尝试,但我没有看到任何东西…使用firebug,我看到它给出了一个404未找到。尝试在设置404头的
if(!$filename)
中回显某些内容。它看起来像是
glob($dir./*.jpg')
,它在
$dir
目录中搜索扩展名为的文件。jpg返回false,请看,是的,glob返回false。我将“imagedir”改为“/\u img/bg”,但这似乎没有起到任何作用。现在,该文件夹中只有两个PNG文件(我还将对jpg/jpeg的引用更改为PNG),您正在运行ASP.NET,对吗?请尝试为glob提供图像目录的完整路径和/或相对路径,如:“C:\www\u img\bg”或“.\..\u img\bg”。如果您在Windows上,请确保所有路径都是反斜杠(同时尝试将“/*.jpg”中的路径更改为“*.jpg”)。如果您使用的是Linux,则需要使用正向斜杠。或者,甚至可以尝试完全删除glob中的路径,将图像文件放置在与PHP脚本相同的目录中,并使用:
$files=glob('*.jpg')
// Get a filename
$filename = random_pic();

// Check that a file was found
if (!$filename) {
    header('HTTP/1.0 404 Not Found');
    die();
}

// Output the image
outputImage( $filename );