2011-11-21 136 views
0

好吧,一直在寻找遍及互联网,甚至Stackoverflow,但我似乎无法得到以下PHP代码工作。使用PHP在一个文件夹中显示图像

<div class="grid"> 
<ul class="images"> 
<?php 
//path to directory to open 
$directory = "/Media/pics/"; 
$dir_handle = @opendir($directory) or die("Unable to open folder"); 

while(false !== ($file = readdir($dir_handle))) 
{ 
    if($file != '.' && $file != '..' && $file != 'Thumbs.db') 
    { 
    echo "<li class='picture' title='Remote2'> <img src='/Media/pics/".$file."'alt='test'/></li>";      
    } 
} 
closedir($dir_handle); 
?> 

每次我尝试查看网页,我得到:

403禁止 - 您没有权限访问联网/媒体/图片/".$文件“。在这台服务器上。

然而,我可以导航到“intanet/Media/pics”并查看并单击文件夹中的所有图像。 我不认为这是一个权限问题,但也许是我在PHP代码中丢失的东西。使我希望我有一个非常好的PHP编辑器,语法高亮和自动完成(目前使用Aptana Studio 3)。

感谢您的帮助!

SOLUTION:不得不做到以下几点:1 )更改 “pictures.html” 到 “pictures.php”(福利局错误)

2)修复从realitive路径 “/媒体/图片”只是“媒体/图片”

+0

如果服务器的响应中包含'$ file',我认为PHP正在发送而未被处理。 – alex

回答

0

望着意见@Marc B的答案

文件中的PHP脚本没有似乎被执行。你是否正确地命名文件?

为了让PHP screpts运行,您需要给该文件一个“.php”扩展名。我怀疑你可能把它命名为“.html”?

或者是Apache的配置没有正确设置运行“.php”文件通过PHP?

+0

看到,这就是为什么我喜欢StackOverflow,现在我们可能会到某个地方。我将“pictures.html”更改为“pictures.php”,当我运行该程序时,我只在PHP代码之前得到了处理过的HTML(基本上只看到了“PICTURE”标题和CSS的一部分)。所以我看了看源代码,看到“无法打开文件夹”,就在我的PHP代码所在的位置。所以现在我正在考虑对该文件夹存在某种权限问题。现在要弄清楚如何让PHP访问该文件夹... – Tom

+0

BINGO!事实证明,它找不到目录,因为它是“媒体/图片”,而不是“/ media/pics”(我应该至少抓住那个错误,不能相信我过去看过!)。一旦我改变了这一点,并确保文件是“.php”而不是“.html”,它运行的很好。感谢所有帮助我解决这个问题的人,大家好! – Tom

+0

@Tom,随时欢迎 – iWantSimpleLife

0

Unix系统通常默认限制文件读取权限。如果您知道如何修改CHMOD,请确保PHP有权读取该目录。 (640应该是足够的,如果Apache是​​他们的拥有者,如果不是,你可以尝试更高,但对于阅读你不应该需要高于700或750.)

2

你正在使用绝对路径, /Media/pics/somepic.jpg。你的文件系统的根目录中有/Media目录吗?那么,/ Media文件夹是你网站文档根目录的一部分吗?请记住,PHP的文件操作在文件系统级别工作,而不是在Web服务器的URL级别。 PHP可以访问完全超出网站范围的文件,因此直接输出文件系统作为src的URL可以很容易地指向远程用户无法访问的文件。

+0

我检查了我的apache_error.log(顺便运行WAMP),它说: (20024)给定路径格式错误或包含无效字符:无法映射GET /Media/pics/%22.$file.%22 HTTP/1.1到文件,referer:http://intranet/pictures.html 似乎没有像Alex说的那样处理PHP。我是新来的使用WAMP和PHP(来自asp.net)所以任何帮助我如何检查PHP是否有权运行它所在的文件夹?顺便说一句,一切都位于Web服务器上的“C:\ WAMP \ www \ Intranet”下。谢谢! – Tom

0

尝试改变这一行:

echo "<li class='picture' title='Remote2'> <img src='/Media/pics/".$file."'alt='test'/></li>"; 

echo "<li class='picture' title='Remote2'> <img src='/Media/pics/$file' alt='test'/></li>"; 

你的错误是一种奇怪的,如果它处理的变量名作为一个字符串。双引号将使用$ file的值,所以如果它不起作用,这至少会给我们一个不同的错误。

编辑:另外我怀疑路径可能会丢失一些东西,因为已经提到过。将您的路径与错误中提到的路径进行比较,看看您是否有正确的内容。例如它应该是的/ home /网站/媒体/图片(作为一个例子)

+0

现在我得到“在此服务器上找不到请求的URL/Media/pics/$文件。” 编辑:Apache_error显示:“获取/媒体/图片/ $文件HTTP/1.1”404 214 – Tom

相关问题