Как загрузить файл php без его выполнения?

im работает над системой управления контентом, потому что мне нужно скачать php файл, используя php-код без выполнения. любой может помочь мне на этом

это что-то вроде ftp. Я добавил параметры для загрузки, редактирования и загрузки файла. он работает нормально. но при загрузке php файла он выполняется вместо загрузки...

Что я пробовал:

<?php
$file = $_REQUEST['file_name'];

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));

    include_once($file);
    exit;
}
?>

Ответ 1

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

Например:

http://server.com/download.php?name=test.php

Содержимое download.php:

  <?php 
  $filename = $_GET["name"]; //Obviously needs validation
  ob_end_clean();
  header("Content-Type: application/octet-stream; "); 
  header("Content-Transfer-Encoding: binary"); 
  header("Content-Length: ". filesize($filename).";"); 
  header("Content-disposition: attachment; filename=" . $filename);
  readfile($filename);
  die();
  ?>

Этот код работает без каких-либо изменений. Хотя для этого требуются проверки и некоторые функции безопасности.

Ответ 2

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

В противном случае вы должны иметь возможность настроить сервер, чтобы не обрабатывать этот конкретный файл, или путь был указан. Как вы это делаете, зависит от того, на каком сервере вы работаете.

Ответ 3

Если такой файл php находится на том же сервере/веб-сайте, просто откройте его как обычный файл, например. $fileContents = file_get_contents($filename);

Если файл находится на другом сервере, у вас есть несколько возможных вариантов:

1) Доступ к нему через FTP (если у вас есть данные для входа и доступ)

2) У вас есть специальное правило перезаписи URL-адресов на этом сервере, которое даст указание веб-серверу отправлять файл в виде обычного текста вместо его выполнения (например, somefile.php.txt)

3) Имейте специальный script на этом сервере и передав имя файла в качестве параметра, он вернет содержимое этого файла (например, http://example.com/showfile.php?file=somefile.php)

Ответ 4

Вот как загрузить php файл вместо его выполнения.

Поверьте мне, это работает!.. загрузить файл php с собственным риском:)

<?php
function downloadThatPhp($nameOfTheFile)
    {
        header("Pragma: public");
        header("Expires: 0"); // set expiration time
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Content-Type: application/text/x-vCard");
        header("Content-Disposition: attachment; filename=".basename($nameOfTheFile).";");
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: ".filesize($nameOfTheFile));
        @readfile($nameOfTheFile);
        exit(0);
    }

    // and this how to use:
    // download that php file with your own risk :)
    $file = $_REQUEST['file_name'];
    $downloadThis = "http://domain-name.com/".$file;
    if (file_exists($file)) {
        downloadThatPhp($downloadThis);
    }
?>

Надеюсь, это поможет вам бросить:)

Ответ 6

Хорошо, у меня есть особые потребности в изучении языка php, чтобы я мог получить положительную степень в программировании, а также получить минет от Ланы Роудс или Анже Вайнхандла...

Ответ 7

если кто-то хочет сделать это в своем файле .htaccess:

Header set Content-Disposition attachment
AddType application/octet-stream .php

или

<FilesMatch "\.(?i:php)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>