我有一个基于特定条件显示图像的脚本。当没有满足任何条件时,我想随机显示一个标准(备份)图像。其他图像位于远程服务器上。我已经读过你无法读取远程服务器上的目录,这是有道理的。
我最好将文件放入远程服务器的图像目录中,该目录输出所有图像文件名,以便我可以用其他服务器解析它吗?有更简单的方法吗?
我不想使用FTP(http://php.net/manual/en/book.ftp.php)。
基本上只需获取该文件夹中图像的名称,我有哪些选择?
谢谢, 莱恩
更新
@ mario's answer是轻量级的,就像魅力一样。这正是我认为我想要的解决方案,但是在考虑了它之后,甚至@mario会以不同的方式阅读,我决定选择@ bensiu's answer,因为对我而言,控制和安全性更强比方便重要。使用@ mario的方法,很难知道您获得的数据是否有任何好处(缺乏控制)并且您正在暴露您的目录/某些服务器信息(安全性)。 @bensiu的建议涉及第二个文件(不方便),但提供了我最终决定使用的控制和安全性!
谢谢你们两位!
-Ryan
答案 0 :(得分:2)
我更喜欢像@bensiu指出的那样精确而专用的处理程序脚本。
但另一种方法是读出目录列表。一个简单的Apache生成的mod_index列表就足够了:
$html = file_get_contents("http://example.com/images/");
preg_match_all('/<a href="([-\w\d.]+\.(jpeg|png|gif))"/', $html, $uu);
$files = $uu[1];
答案 1 :(得分:1)
我希望你至少可以访问远程服务器......
您可以放置将在本地执行作业的脚本“A”,以优先格式返回图像列表(原始文本,JSON,XML ...),此脚本将由curl从您的服务器远程调用。 ......
明智地确保当你调用脚本“A”时,你至少传递一些秘密密钥以防止无法访问(不是完美的解决方案,但可能是应该的)
答案 2 :(得分:0)
如果您的服务器上启用了PHP5并启用了HTTP流包装器,则将其复制到本地文件非常简单容易:
copy('http://somedomain.com/file.jpeg', '/tmp/file.jpeg');
ome hosts禁用copy()函数然后你可以自己制作 -
<?php
function copyemz($file1,$file2){
$contentx =@file_get_contents($file1);
$openedfile = fopen($file2, "w");
fwrite($openedfile, $contentx);
fclose($openedfile);
if ($contentx === FALSE) {
$status=false;
}else $status=true;
return $status;
}
?>