如何在共享主机环境下通过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
相关产品推荐
相关产品推荐

