You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在共享主机环境下通过PHP检测当前目录PDF文件并传递给JavaScript(pdf.js)使用

嘿,作为JavaScript新手能想到用PHP来解决动态PDF文件名的问题,思路完全没问题!下面我一步步帮你实现需求:

解决方案步骤

1. 用PHP检测当前目录的唯一PDF文件

首先,我们用PHP的文件系统函数扫描当前目录下的所有PDF文件,因为你说目录里只有唯一的PDF,直接取第一个结果即可。可以把这段代码放在你的主PHP页面(比如index.php)里:

<?php
// 扫描当前目录下所有PDF格式的文件
$pdfFiles = glob('*.pdf');
// 处理存在PDF和不存在的情况,这里设置了一个默认 fallback 文件
$pdfFileName = !empty($pdfFiles) ? $pdfFiles[0] : 'fallback.pdf';
?>

2. 将PHP获取的文件名传递给JavaScript

接下来要把PHP拿到的文件名传给JS,这里分两种情况处理:

方法一:直接在PHP页面中嵌入JS代码(最简便)

如果你的PDF.js代码不需要放在独立的.js文件里,直接把JS写在PHP页面中,就能直接用PHP输出文件名:

<?php
// 先执行上面的PHP代码获取PDF文件名
$pdfFiles = glob('*.pdf');
$pdfFileName = !empty($pdfFiles) ? $pdfFiles[0] : 'fallback.pdf';
?>

<script>
// 替换你原来的固定配置项
const defaultUrl = { value: "<?php echo $pdfFileName; ?>", kind: OptionKind.VIEWER };

// 下面是你原来的PDF.js代码,修改url为动态获取的文件名
var url = "<?php echo $pdfFileName; ?>";
// Loaded via <script> tag, create shortcut to access PDF.js exports. 
var pdfjsLib = window['pdfjs-dist/build/pdf']; 
// The workerSrc property shall be specified. 
pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js'; 
// Asynchronous download of PDF 
var loadingTask = pdfjsLib.getDocument(url); 
loadingTask.promise.then(function(pdf) { 
  console.log('PDF loaded');
});
</script>

方法二:使用独立的.js文件

如果你的JS必须放在单独的.js文件中,可以先在PHP页面定义一个全局变量,再在JS文件中引用:

在你的PHP页面(比如index.php)中:

<?php
$pdfFiles = glob('*.pdf');
$pdfFileName = !empty($pdfFiles) ? $pdfFiles[0] : 'fallback.pdf';
?>

<script>
// 定义全局变量存储PDF文件名
window.currentPdfFileName = "<?php echo $pdfFileName; ?>";
</script>
<script src="your-script.js"></script> <!-- 引入你的独立JS文件 -->

在your-script.js中:

// 替换配置项中的固定文件名
const defaultUrl = { value: window.currentPdfFileName, kind: OptionKind.VIEWER };

// 修改PDF.js的url为动态文件名
var url = window.currentPdfFileName;
var pdfjsLib = window['pdfjs-dist/build/pdf']; 
pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js'; 
var loadingTask = pdfjsLib.getDocument(url); 
loadingTask.promise.then(function(pdf) { 
  console.log('PDF loaded');
});

3. 重要注意事项

  • 确保你的PHP脚本有读取当前目录文件的权限(共享虚拟主机一般默认具备这个权限)。
  • 如果当前目录没有PDF文件,代码里设置了fallback.pdf作为默认值,你可以根据需求修改这个默认文件,或者添加错误提示逻辑(比如在JS里判断如果是 fallback 文件就弹窗提示用户)。
  • glob('*.pdf')只会扫描PHP脚本所在的目录,所以要保证PHP脚本和PDF文件在同一个目录下;如果不在同一目录,调整glob的路径即可(比如glob('../docs/*.pdf')表示扫描上一级目录下的docs文件夹)。

内容的提问来源于stack exchange,提问作者netrunner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 05:07:52