如何随机引入文件夹中的PHP文件及对应CSS、JS至文档
解决方案
你的代码存在几个关键问题导致无法正常运行:
- PHP语法错误:
<?php后直接写include加注释是无效语法,逻辑代码要放在include之前 - 文件路径判断错误:
scandir返回的是文件名,is_file($f)会检查当前脚本目录下的文件,而非目标文件夹内的文件 - 未过滤非PHP文件:可能选中文件夹内的非
.php文件
以下是完整的修正代码,同时实现匹配对应CSS和JS的需求:
完整页面代码示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>随机内容展示</title> <?php // 定义文件夹路径(建议用相对路径,根据实际目录结构调整) $phpDir = './myTenPHPfiles'; // 获取文件夹内所有文件,过滤出.php文件并验证文件存在 $allFiles = scandir($phpDir); $phpFiles = array_filter($allFiles, function($file) use ($phpDir) { $filePath = $phpDir . '/' . $file; return is_file($filePath) && pathinfo($filePath, PATHINFO_EXTENSION) === 'php'; }); // 重置数组索引,避免随机取键时出错 $phpFiles = array_values($phpFiles); // 默认选中第一个文件(防止空数组报错) $selectedFile = $phpFiles[0] ?? null; // 随机选中一个文件 if (!empty($phpFiles)) { $selectedFile = $phpFiles[array_rand($phpFiles)]; } // 提取文件名(不带后缀),用于匹配CSS和JS $fileBaseName = pathinfo($selectedFile, PATHINFO_FILENAME); ?> <!-- 引入对应CSS文件 --> <?php if ($fileBaseName): ?> <link rel="stylesheet" href="./css/<?= $fileBaseName ?>.css"> <?php endif; ?> </head> <body> <h1>This is my website.</h1> <p>Here is an area with a content from one of 10 php files from one folder, with individual CSS and JS:</p> <?php // 引入选中的PHP文件内容 if ($selectedFile) { include $phpDir . '/' . $selectedFile; } else { echo '<p>暂无可用内容</p>'; } ?> <!-- 引入jQuery(如果你的JS依赖它) --> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <!-- 引入对应JS文件 --> <?php if ($fileBaseName): ?> <script src="./js/<?= $fileBaseName ?>.js"></script> <?php endif; ?> </body> </html>
关键修正说明
- 路径处理:用
use ($phpDir)将文件夹路径传入过滤函数,确保is_file检查的是目标文件夹内的文件 - 文件过滤:只保留
.php后缀的文件,避免选中目录或其他无关文件 - 容错处理:增加空数组判断,防止文件夹为空时报错
- 匹配资源:通过
pathinfo提取文件名前缀,自动对应同名的CSS和JS文件,只需确保CSS和JS的存放路径与代码中./css/、./js/一致即可
内容的提问来源于stack exchange,提问作者Anna_B
相关产品推荐
相关产品推荐

