PHP在指向同一服务器时提供指向文件的链接

PHP在指向同一服务器时提供指向文件的链接,php,Php,我有一个运行PHP的内部服务器和一个内部文件目录,其中有一些工作说明PDF供技术人员阅读。我正在尝试添加这些pdf文件的链接,以便技术人员可以单击链接并在浏览器中打开pdf 所以我有了echo”“ 我得到安全错误:内容在http://LocalServer:50563/workInstructions.php 可能无法加载或链接到file:///path/to/workInstruction.pdf 我理解无法从网页访问用户本地文件的安全风险,但我不理解为什么我可以将相同的文件url粘贴到地址

我有一个运行PHP的内部服务器和一个内部文件目录,其中有一些工作说明PDF供技术人员阅读。我正在尝试添加这些pdf文件的链接,以便技术人员可以单击链接并在浏览器中打开pdf

所以我有了
echo”“

我得到
安全错误:内容在http://LocalServer:50563/workInstructions.php 可能无法加载或链接到file:///path/to/workInstruction.pdf 

我理解无法从网页访问用户本地文件的安全风险,但我不理解为什么我可以将相同的文件url粘贴到地址栏,文件将显示在网页上。这两种机制有何不同

有没有一种方法可以让这个链接在我的PHP服务器上运行,或者我只是把这个问题完全搞错了?我的格式或语法是否有问题,我没有注意到

我注意到错误响应的文件名中没有包含服务器。我不知道这到底是什么意思,也不知道为什么会这样

这篇帖子没有回答我的问题:因为1。它是在经典ASP中提出的,这是一种与PHP和2非常不同的技术。虽然它确实有相同的错误消息,但它没有解释如何在Web服务器所在的同一服务器上创建指向文件的链接

我也试过回答这个问题: 但当我尝试将
文件://fileserver/path/转换为/workInstruction.pdf“
转换为
”H时,它对我不起作用ttp://fileserver/path/to/workInstruction.pdf“
我猜是因为pdf所在的是文件服务器而不是Web服务器


为了进一步明确我的问题,PHP中是否有一种方法可以提供指向本地服务器上托管的文件的链接,用户可以单击该链接并在浏览器中打开PDF?

对于前来寻找答案的其他人,我发现这个答案对我很有用:

基本上,我从文件服务器获取要加载的PDF的文件路径,并重定向到一个新的php文件,该文件读取该文件并显示在一个新选项卡中

包含链接的php文件将具有以下内容:

echo '<a href="workInstruction.php?filename=workInstruction.pdf&filepath=//fileserver/path/to/workInstruction.pdf"' . 'target="_blank">'.$wi_num.'</a>';
<?php
$filename= $_GET['filename'];
$filePath= $_GET['filepath'];

header('Content-type:application/pdf');
header('Content-disposition: inline; filename="'.$filename.'"');
header('content-Transfer-Encoding:binary');
header('Accept-Ranges:bytes');
@readfile($filePath);
?>
echo';
My workInstruction.php如下所示:

echo '<a href="workInstruction.php?filename=workInstruction.pdf&filepath=//fileserver/path/to/workInstruction.pdf"' . 'target="_blank">'.$wi_num.'</a>';
<?php
$filename= $_GET['filename'];
$filePath= $_GET['filepath'];

header('Content-type:application/pdf');
header('Content-disposition: inline; filename="'.$filename.'"');
header('content-Transfer-Encoding:binary');
header('Accept-Ranges:bytes');
@readfile($filePath);
?>

文件://
是本地的,即用户的设备,而不是网络上的本地设备。使
/fileserver/path/to/workInstruction.pdf
可访问或代理它。在浏览器中执行此操作的区别在于您自己选择了,随机网页不会尝试自动加载它。不要忘记,通常情况下,一个网页不会像浏览器的用户一样从同一台机器上获得服务,它来自其他在线的地方。因此,这样的站点不需要尝试加载用户机器上的内容(file://始终指向该机器)。如果你想从你的网站链接到一个文件,必须通过http://而不是file://完成,并且该项目必须像PHP文件一样从Web服务器提供。
猜测,因为它是一个文件服务器而不是Web服务器
。。。基本上是的。当然,如果可以在Web服务器中配置一个虚拟目录,该目录指向网络服务器上的物理路径,因此可以通过HTTP访问(但如果这对您来说是个问题,请注意安全性),则您不必移动这些文件。@ADyson这给了我google一些新东西。谢谢。或者您可以实现一个单独的控制器。它的实现将从服务器端的磁盘读取内存(或流)中的文件,并将文件内容传递给客户端。