2015-05-14 3 views
0

Я работаю на веб-сайте клиента, для которого я не написал код. У меня проблемы с файлами, которые можно загрузить.PHP: Файл не может быть загружен (сообщение «404 Not Found»)

Речь идет о субдомене, где пользователи могут загружать файлы курса. Файлы веб-сайта содержатся в папке «Курсы» (на корневом уровне).

  • Файл для отображения загружаемых файлов курса содержится в «courses/displayfiles.php».
  • Загружаемые файлы содержатся в папке в "курсах/папке загрузки". Внутри этой папки у каждого пользователя есть своя папка с файлами , которая имеет имя пользователя.

displayfiles.php: Следующий код успешно отображает все файлы, которые могут быть загружены с помощью вошедшего в систему пользователя:

$path = "downloadfolder/" . $_SESSION['userId'] . "/"; 
    $files = array(); 
    $output = @opendir($path) or die("$path could not be found"); 

    while ($file = readdir($output)) { 
    if (($file != "..") and ($file != ".")) { 
     array_push($files, $file); 
    } 
    } 
    closedir($output); 
    sort($files); 

    foreach ($files as $file) { 
    echo '<a class="imtext" href="downloadfolder/' . $_SESSION['userId'] . '/' . $file . '/">' . $file . '</a><br/>'; 
    } 

Так что не работает в этом коде: Когда пользователь нажимает в файле, я получаю сообщение «404 Not Found», что файл не найден. Как это может быть?

Почему отображение файлов полностью работает нормально, но в то же время я получаю ошибку 404 при нажатии на файл? Путь к файлам ($path) должен быть правильным, или нет? Какие дальнейшие исследования я должен предпринять, чтобы решить эту проблему?

* UPDATE *

я решил изменить цикл файлов, как следует (изменение HREF):

foreach ($files as $file) { 
      echo '<a class="imtext" href="http://'.$_SERVER['HTTP_HOST']. '/downloadfolder/' . $_SESSION['courseId'] . '/' . $file . '/">' . $file . '</a><br/>'; 
     } 

Тем не менее, когда я нажимаю на файл, я получаю 404 Not Found ошибка. Как это может быть?

+0

Лучший способ для вас - изучить сгенерированную ссылку. Это может быть неправильное место. Убедитесь, что все соответствующие каталоги существуют. –

+0

Я изменил href на следующее: 'href =" http: //'.$_SERVER ['HTTP_HOST']. '/ Downloadfolder /'. $ _SESSION ['courseId']. '/'. $ File. '/ ">' это определенно место, где находится файл. все-таки я получаю ошибку 404. как это может быть? – Max

+0

Если вы уверены, что все в порядке, и файл действительно существует, пожалуйста, взгляните на это: http://stackoverflow.com/questions/24654907/why-server-says-404-file-or-directory-not-found -когда-файл существовать. Может быть, ссылка будет полезна. –

ответ

0

Вы должны посмотреть, где находится веб-страница вашей страницы, где расположен файл php, создающий список, и файлы.

Сгенерированная ссылка относится к файлу php, генерирующему ссылку, которая может не соответствовать URL-адресу в браузере. Я хотел бы попробовать сделать эту ссылку относительно корневой директории (обратите внимание на ведущий слэш!)

echo '<a class="imtext" href="/courses/downloadfolder/' . $_SESSION['userId'] . '/' . $file . '/">' . $file . '</a><br/>'; 

Если угадали решение не работает, пожалуйста, обеспечить текущий URL страницы, на которой эти ссылки генерируются и один генерируемый ссылку, чтобы мы могли помочь вам лучше.

+0

спасибо за ваше предложение, но это не сработало. Я редактировал свой пост (см. Выше). Я добавил корень документа внутри href, но все же получаю ошибку 404. как это может быть? – Max