path仅从root运行

时间:2017-07-04 03:06:34

标签: php path

我仔细阅读了有关该主题的所有内容,但没有任何内容对我有用。我运行PHP 5.3.29。

我有这个PHP代码,它可以从root工作,但不能从文件夹中运行:

  // Fetch latest poster
  $base_url = 'posters';
  $newest_mtime = 0;
  if ($handle = opendir($base_url)) {
  while (false !== ($latestFile = readdir($handle))) {
      if (($latestFile != '.') && ($latestFile != '..')) {
         $mtime = filemtime("$base_url/$latestFile");
         if ($mtime > $newest_mtime) {
            $newest_mtime = $mtime;
            $show_file = "$base_url/$latestFile";
         }
      }
    }
  }                  
  // Show latest poster
  $show_name = basename(trim($show_file, ".jpg"));
  echo '
  <a href="/' . $show_file . '">
  <img src="' . $show_file . '" class="jpg" width="150" alt="latest poster" title="' . $show_name . '">
  </a>';

我喜欢只添加一个斜杠来获取根相对路径,但这在PHP中不起作用。

这是有此问题的网站:

http://flamencopeko.net(这里没有问题)

http://flamencopeko.net/disco_pages/sundays.php(这个有问题)

4 个答案:

答案 0 :(得分:1)

我认为你想要开始的地方是$_SERVER['DOCUMENT_ROOT']

答案 1 :(得分:1)

将$ base_url更改为

$base_url = $_SERVER['DOCUMENT_ROOT'].'/posters';  

获取PHP项目的根目录路径:

对于PHP&gt; = 5.3.0

使用: DIR

注意:文件的目录。如果在include中使用,则返回包含文件的目录。这相当于dirname( FILE )。除非它是根目录,否则此目录名称没有尾部斜杠。

对于PHP&lt; 5.3.0

使用:dirname( FILE )或realpath(dirname( FILE ))

或者最常见的是获取项目所在的服务器文档根目录:

$ _ SERVER [&#39; DOCUMENT_ROOT&#39;]或filter_input(INPUT_SERVER,&#39; DOCUMENT_ROOT&#39;)

答案 2 :(得分:1)

您只能在根目录上显示图像的原因与您的脚本无关。它与您在<img..标记中的位置有关,如下所示;

<强>根

<img src='/posters/NAME_OF_IMG.jpg' ... />

哪个会解析为:http://www.yourwebsite.com/posters/NAME_OF_IMG.jpg

Sub Dir 哪个可以解决类似:http://www.yourwebsite.com/disco_pages/posters/NAME_OF_IMG.jpg - 哪些不存在。

您需要做的是修改代码以生成$show_file这样的网址:

$base_url = getcwd() . 'posters';
$newest_mtime = 0;
if ($handle = opendir($base_url)) {
while (false !== ($latestFile = readdir($handle))) {
    if (($latestFile != '.') && ($latestFile != '..')) {
       $mtime = filemtime("$base_url/$latestFile");
       if ($mtime > $newest_mtime) {
            $newest_mtime = $mtime;
            $show_file = "http://www.yourdomain.com/posters/" . $latestFile;
       }
    }
  }
}

或者,如果需要,您可以使用$_SERVER['DOCUMENT_ROOT']代替getcwd()

这应该适用于您尝试的每个目录。您必须了解您的代码正在做什么才能理解为什么它不能按您的意愿工作。

  1. 您在文件级别浏览目录以查找最新文件,对吗?因此,您需要文件的绝对路径来检查这些方面。
  2. 您将绝对路径提供给无法正常工作的<img ...代码。您的网站需要相对路径(http://www.yourwebsite.com/posters/THE_IMAGE_NAME.jpg)。

答案 3 :(得分:0)

再次非常感谢。

从根源导致:

警告:opendir(/ home / flamenco / public_htmlposters)[function.opendir]:无法打开目录:第40行/home/flamenco/public_html/left_test.php中没有此类文件或目录

所以我改变了

base_url = getcwd() . 'posters';

base_url = getcwd() . '/posters';

这显示了海报,但它链接到:

http://flamencopeko.net/http://flamencopeko.net/posters/08-05-2017_01.jpg

从子文件夹中得出:

警告:opendir(/ home / flamenco / public_html / disco_pages / posters)[function.opendir]:无法打开目录:第12行/home/flamenco/public_html/disco_pages/left_test2.php中没有此类文件或目录

我能够编写一个凌乱的解决方案,这个方法现在有效:

$path = getcwd();
if ($path == '/home/flamenco/public_html') {
  $base_url = 'posters';
  $newest_mtime = 0;
  if ($handle = opendir($base_url)) {
  while (false !== ($latestFile = readdir($handle))) {
      if (($latestFile != '.') && ($latestFile != '..')) {
         $mtime = filemtime("$base_url/$latestFile");
         if ($mtime > $newest_mtime) {
            $newest_mtime = $mtime;
            $show_file = "$base_url/$latestFile";
         }
      }
    }
  }
  // Show latest poster
  $show_name = basename(trim($show_file, ".jpg"));
  echo '
  <a href="/' . $show_file . '">
  <img src="' . $show_file . '" class="jpg" width="150" alt="latest poster" title="' . $show_name . '">
  </a>';
  }
  else
  {
  $base_url = '../posters';
  $newest_mtime = 0;
  if ($handle = opendir($base_url)) {
  while (false !== ($latestFile = readdir($handle))) {
      if (($latestFile != '.') && ($latestFile != '..')) {
         $mtime = filemtime("$base_url/$latestFile");
         if ($mtime > $newest_mtime) {
            $newest_mtime = $mtime;
            $show_file = "$base_url/$latestFile";
         }
      }
    }
  }
  // Show latest poster
  $show_name = basename(trim($show_file, ".jpg"));
  echo '
  <a href="/' . $show_file . '">
  <img src="' . $show_file . '" class="jpg" width="150" alt="latest poster" title="' . $show_name . '">
  </a>';
  }