我想编写一个读取目录中所有文件的函数,并将每个文件中的公共变量值推送到数组中。
这个想法有点像某种类似wordpress的功能......你将一个php文件添加到具有某些特征的插件文件夹中。例如,您添加的每个文件都必须包含$fileName
变量。我的目标是从dir中的每个文件中获取每个$fileName
并将它们推送到一个数组,这样我就可以调用数组来创建导航。然后,当使用ajax激活链接时,导航将加载php文件到内容区域。
我的文件路径是,
/plugins/reports.php
/plugins/RandomPlugin2.php
/plugins/RandomPlugin3.php
我试图完成这样的事情,
/assets/load-plugins.php
中的
function loadPlugins(){
$files = scandir('../plugins/');
foreach($files as $file) {
if(($file_handle = fopen($file, "r")))
while (!feof($file_handle)) {
$line = fgets($file_handle);
echo $fileName;
}
fclose($file_handle);
}
}
loadPlugins();
但这是我得到的错误,
Warning: fopen(reports.php) [function.fopen]: failed to open stream: No such file or directory in /Applications/AMPPS/www/wubase/assets/load-plugins.php on line 12
Warning: fclose() expects parameter 1 to be resource, boolean given in /Applications/AMPPS/www/wubase/assets/load-plugins.php on line 17
它告诉我没有这样的文件或目录,但它甚至提到了当前在plugins目录中的文件。这可能是一个权限问题,因为我试图从另一个目录打开一个文件?
此外,如果有人有更好的想法实现我的目标,我会全神贯注,并会欣赏建设性的批评。
谢谢,
答案 0 :(得分:2)
试试这个:
function loadPlugins() {
$files = glob('../plugins/');
foreach($files as $file) {
if(($file_handle = fopen($file, "r"))) {
while (!feof($file_handle)) {
$line = fgets($file_handle);
echo $line;
}
}
fclose($file_handle);
}
}
glob()
而不是scandir()
(前者返回完整的Unix路径,后者只返回文件名)。if()
语句使用大括号,即使它们是可选的。$fileName
未设置,我认为您的意思是$line
(位于上方)。答案 1 :(得分:0)
好像你有文件路径问题,你可以定义并使用这个函数来读取你的目录所有文件用ab
function dirToArray($dir) {
$result = array();
$cdir = scandir($dir);
foreach ($cdir as $key => $value){
if (!in_array($value,array(".",".."))){
if (is_dir($dir . DIRECTORY_SEPARATOR . $value)){
$result = array_merge(
$result,
dirToArray($dir . DIRECTORY_SEPARATOR . $value)
);
}else{
$result[] = $dir . DIRECTORY_SEPARATOR . $value;
}
}
}
return $result;
}
它将为您提供所有目录或子目录中具有绝对路径的文件
答案 2 :(得分:0)