PHP: file_exists всегда возвращает FALSE - PullRequest
0 голосов
/ 04 декабря 2018

Справочная информация:

Я пытаюсь сделать файлы PDF доступными для моих пользователей, но не для других.Похоже, что они предлагают поместить их выше корня сайта, но ниже веб-корня.Первый шаг - проверить, что файл существует, и результат всегда ЛОЖЬ.Вопрос: почему file_exists всегда возвращает false?Вещи пробовали 1. создал каталог с именем "a" (чтобы избежать орфографических ошибок) в корне сети.file_exists ("/ a /") - false file_exists ("/ a / info.pdf") - false, хотя файл существует 2. clearstatcache ();до file_exists 3. добавлен allow_url_fopen = on в php.ini в корне

enter code here

  clearstatcache();  
  $full_path = '/a/info.pdf';  // absolute physical path to file below web root.
  if ( file_exists($full_path) )
     {
     $mimetype = 'application/pdf';

     header('Cache-Control: no-cache');
     header('Cache-Control: no-store');
     header('Pragma: no-cache');
     header('Content-Type: ' . $mimetype);
     header('Content-Length: ' . filesize($full_path));

     $fh = fopen($full_path,"rb");
     while (!feof($fh)) { print(fread($fh, filesize($full_path))); }
     fclose($fh);
     }
   else die("File does not exist on the server - .");

Остальное всегда соблюдается.Что еще можно попробовать?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

когда вы используете полный путь, как вы сделали / a / file.pdf , на самом деле вы пытаетесь получить файл из корневой папки всего сервера, а не DOCUMENT_ROOT вашей учетной записи на сервере.

например:

у вас есть учетная запись и общая папка:

/home/{ACCOUNT_NAME}/public_html/index.php

, поэтому при попытке "/a/file.pdf" вы не делаетеt get:

/home/{ACCOUNT_NAME}/a/file.pdf

вам нужно определить и проверить по абсолютному пути только в вашей учетной записи,

например, как я написал, используйте полный путь с вашей учетной записью:

/home/{ACCOUNT_NAME}/a/file.pdf

или даже используйте относительный путь, если вы пытаетесь из файла index.php:

../a/file.pdf

, если вы не знаете полный путь к своей учетной записи,

см.что у вас есть: $ _SERVER ['DOCUMENT_ROOT'] переменная

0 голосов
/ 04 декабря 2018

Сначала вы должны прочитать документ file_exists ()

Если вы не нашли свою ошибку, проверьте файлы папок с помощью scandir ()

Например:

print_r(scandir('/a/'));

Тогда вы увидите, что вашего файла там нет.

Возможно, ваша проблема одна из следующих:

  1. Проблема впуть
  2. Проблема в имени файла
...