使用file_exists()无法获得结果

时间:2019-03-23 10:22:29

标签: php

我一直试图在我的网站上使用php删除.json文件,但无法使其正常工作。看来我找不到正确的文件路径,或者它是不可见的。因此,我认为我应该使用file_exists()进行检查,无论我尝试什么,都无法使系统看到服务器上的文件。

此路径中存在json文件夹 /mytheme/assets/js/geofences/1069.json

正在从此路径运行php /mytheme/inc/filelookingforjson.php

我尝试使用“ ../assets/js ..”使用相对路径将路径指针向上一级发送。

我尝试了绝对文件路径。并表现为文件不存在。在wordpress网站上是否需要做一些htaccess或其他工作? geofences文件夹上的权限设置为可读取,可写等。下面的代码向我发送了一封电子邮件,告诉我没有文件。我确定我的路径错误,如果我能正确解决这个问题,我可以进行取消链接的工作……谢谢您的投入。

$file = '/wp-content/themes/mytheme/assets/js/geofences/1069.json';

    if(file_exists($file)){
    mail("me@email.com","file exists","file name is there");    
    } else {me@email.com","file does not exist found","file name is 
 not there");
}

1 个答案:

答案 0 :(得分:0)

问题

如果文件夹结构为:

mytheme/
  inc/
    filelookingforjson.php
  assets/
    js/
      geofences/
        1069.json

然后从PHP文件到json文件的路径为:

../assets/js/geofences/1069.json

但是,考虑到您的PHP文件很可能已被其他PHP文件包含,该路径将是从第一个访问的PHP文件开始的相对路径。

这是为什么?

想象一下这个文件结构:

index.php
folder/
   foo.php
   subfolder/
      bar.php
assets/
    hello.txt

假设您要读取文件hello.txt中的文件bar.php,那么到hello.txt的相对路径将是../../assets/hello.txt。如果您直接运行文件bar.php,这将起作用。

陷阱

“陷阱”是指您直接访问bar.php

现在让我们说index.php包括foo.php,而foo.php包括bar.php

如果您运行index.php,则bar.php中的相对路径将不再起作用,因为它与包含链中第一个被访问的PHP文件index.php无关。

如果您将includerequire视为“复制/粘贴”,这确实有意义。 PHP从包含的文件中“复制”代码,然后将其“粘贴”到包含文件中。

注意:这当然是其实际工作方式的简化

解决方案

魔术常数__DIR__

如果将其添加到相对路径之前,PHP会将其替换为写入该文件的绝对路径。

代码:

$file = __DIR__ . '/../../assets/hello.txt';

将被PHP读取为:

$file = '/folder/subfolder/../../assets/hello.txt'; 

现在,什么文件包含bar.php都无关紧要,因为路径将保持绝对。

当您尝试使用相对路径包含文件时,也会发生同样的事情。

在真实服务器上,绝对路径可能类似于/path/from/the/file-systems/root/folder/assets/hello.txt