PHP scandir浏览器视图,通过WAMP显示网络共享文件(文件://)。在本地主机上工作,但不按IP地址工作

PHP scandir浏览器视图,通过WAMP显示网络共享文件(文件://)。在本地主机上工作,但不按IP地址工作,php,file-io,localhost,external,wamp,Php,File Io,Localhost,External,Wamp,也许我太傻了,或者误解了WAMP限制或浏览器限制,但是我已经使用Ajax递归地使用scandir函数创建了一个PHP文件浏览器视图,它可以很好地显示网络共享(\computername\share)中的文件 我可以在访问时启动文件,但是如果从同一台本地主机访问http://[我们的外部ip地址],则文件不会打开。状态栏中的路径在两个屏幕上显示相同(例如。file://computername/share/filename.zip). 我最终希望将文件放在网络共享上,该网络共享与我们的web主机位

也许我太傻了,或者误解了WAMP限制或浏览器限制,但是我已经使用Ajax递归地使用scandir函数创建了一个PHP文件浏览器视图,它可以很好地显示网络共享(\computername\share)中的文件

我可以在访问时启动文件,但是如果从同一台本地主机访问http://[我们的外部ip地址],则文件不会打开。状态栏中的路径在两个屏幕上显示相同(例如。file://computername/share/filename.zip). 我最终希望将文件放在网络共享上,该网络共享与我们的web主机位于同一个域上

请帮忙。我对PHP和JS相当精通,但对于web主机之类的东西,我已经吃饱了。蒂亚


James

感谢DaveRandom—此解决方案允许从外部web客户端启动UNC路径中的PDF/Word/Zip文件

文件1:-index.php

<?php
    $filename= *** insert UNC path to file *** // e.g. \\share\computername\New Document.doc
    $extension= pathinfo($filename, PATHINFO_EXTENSION); // Gets extension for file
    $displayFilename= *** insert shorten filename *** // e.g. New Document.doc
?>


<a href="filehandler.php?name=<?php echo $filename; ?>&ext=<?php echo $extension; ?>&shortname=<?php echo $displayFilename; ?>"><?php echo $displayFilename; ?></a>
<?php
$filename = $_GET['name'];
$extension = $_GET['ext'];
$shortfilename = $_GET['shortname'];
if ($extension == "pdf")
{
    header("Content-type: application/pdf"); // act as a pdf file to browser
}
if ($extension == "doc")
{
    header("Content-type: application/msword"); // act as a doc file to browser
}
if ($extension == "zip")
{
    header("Content-type: application/zip"); // act as a zip file to browser
}
header("Content-Disposition: inline; filename='$shortfilename'"); 

$file = readfile($filename);
echo $file;
?>

文件2:-filehandler.php

<?php
    $filename= *** insert UNC path to file *** // e.g. \\share\computername\New Document.doc
    $extension= pathinfo($filename, PATHINFO_EXTENSION); // Gets extension for file
    $displayFilename= *** insert shorten filename *** // e.g. New Document.doc
?>


<a href="filehandler.php?name=<?php echo $filename; ?>&ext=<?php echo $extension; ?>&shortname=<?php echo $displayFilename; ?>"><?php echo $displayFilename; ?></a>
<?php
$filename = $_GET['name'];
$extension = $_GET['ext'];
$shortfilename = $_GET['shortname'];
if ($extension == "pdf")
{
    header("Content-type: application/pdf"); // act as a pdf file to browser
}
if ($extension == "doc")
{
    header("Content-type: application/msword"); // act as a doc file to browser
}
if ($extension == "zip")
{
    header("Content-type: application/zip"); // act as a zip file to browser
}
header("Content-Disposition: inline; filename='$shortfilename'"); 

$file = readfile($filename);
echo $file;
?>

我想说,这里最好的方法是用PHP创建一个文件读取代理,这样所有的链接都是
http://
,而PHP
readfile()
在被访问时会自动读取文件。总体而言,它将更加可靠和便携。有什么原因你不能/不想这样做吗?也许我说的相当精通PHP是言过其实了:)我没有使用readfile,但我发布了带有图像对象缓冲区的下载文件。我渴望使用集成浏览器功能打开PDF文件,但更好的是使用预览插件,该插件可以显示类似于图像滑块jquery插件的PDF和Word文件。我成功地通过右键单击保存来访问跨域下载的外部用户和内部用户目标为。但是,单击“在新选项卡中打开”不起作用。至于“读取文件代理”,我们有类似的设置,我们将文件放入它们的文件夹中,以便外部客户端使用IIS进行访问。这是我们域上的映射驱动器,因此它相当容易拖放,但理想情况下,它将位于文件服务器正常目录结构内的非托管域共享中。这样做的唯一原因是,一些文件夹可能分布在其他部门e.t.c.的周围,此应用程序的目的是整合我们拥有的各种信息。这其中的长缺点是PHP对访问SMB共享、映射网络驱动器或UNC的支持最多只能算是片状的。但是我肯定地认为,您应该以PHP脚本代理所有数据交换的方式来设计它,这样所有的事情都可以通过HTTP发送到客户端。如果您能够成功地
scandir()
,您应该能够
readfile()
fopen()
等。只要您发送正确的
内容类型:
文件头,您仍然可以让浏览器处理诸如本机PDF查看器之类的事情。在这里合理地回答这个问题有点冗长。