PHP-скрипт обращается к каталогу, который в противном случае «запретить все» (через .htaccess) - PullRequest
0 голосов
/ 04 декабря 2011

Я пытаюсь получить сценарий php для отображения содержимого каталога резервной копии, защищенного с помощью команды 'deny all', в файле .htaccess.

Причиной этого является плагин резервного копирования.Поскольку WordPress доступен только для администраторов, и я хотел бы дать пользователю с более низким рейтингом возможность загружать свои резервные копии из Интернета (с помощью простого виджета панели инструментов).

Вы можете найти код, который я использую нижеи он отключается при обнаружении ошибки 403. из-за файла htaccess.

//define the directory (this is where the backup plugin store the .zip files)
$directory = site_url() . "/wp-content/backups/";

//display the generated directory for testing
echo '<b>Scanning: </b>' . $directory . '</br></br>';

//display a link to a test.zip I know exists for testing
echo '<b>Manual Link: </b> <a href="' . $directory . 'test.zip" target="_blank">test.zip</a></br></br>';

//get all files in the directory with a .zip extension.
$files = glob($directory . "*.zip");

//print each file name as a download link
foreach($files as $file){
    echo '<a href="' . $file . '">' . $file . '</a> </br>';
}

Любая помощь, которую вы можете предоставить, будет наиболее полезной.

Спасибо, Энди.

Обновление кода, чтобы glob работал правильно

//Define the backup folder location
$backup_location = "wp-content/backups/";

//Set the file directory for glob
$directory = $_SERVER['DOCUMENT_ROOT'] . $backup_location;

//Prints the directory for testing purposes
echo '<b>Scanning: </b>' . $directory . '</br></br>';

//Filter the discovered files
$files = glob($directory . "*.*");

//Echo the filtered files
foreach($files as $file){
    echo '<a href="' . site_url() . '/' . $backup_location . basename($file) . '">' . basename($file) . '</a> </br>';
}

Ответы [ 2 ]

1 голос
/ 04 декабря 2011

Ваша проблема заключается в следующем:

 $directory = site_url() . "/wp-content/backups/";

Вы не можете создавать списки каталогов по HTTP.Это не работает (независимо от ограничений доступа).Вам необходимо запустить glob() и т. Д. В локальных каталогах.

 $directory = "./wp-content/backups/";

На странице руководства glob написано:

Примечание: Эта функция не будет работать с удаленными файлами, поскольку проверяемый файл должен быть доступен через файловую систему сервера.

1 голос
/ 04 декабря 2011

В данный момент вы просто предоставляете ссылки на файлы, к которым у пользователя нет доступа.Это не будет работать без добавления каких-либо прав.

Что будет работать в этой настройке, так это фактически передать файлы пользователю, используя вашу текущую страницу.

Что вы в основном делаете, это делаетеPHP читает файл (он имеет доступ к этому файлу), отправляет пользователю заголовок, а затем содержимое.Используйте код, подобный примеру из руководства по php:

http://php.net/manual/en/function.readfile.php

<?php
$file = 'monkey.gif';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...