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


Я работаю над системой управления контентом, для этого мне нужно загрузить 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;
}
?>
Author: Jagadeesan, 2011-06-12

5 answers

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

Например:

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

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

 20
Author: rzetterberg, 2011-06-12 10:03:39

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

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

 2
Author: Anders Abel, 2011-06-12 09:53:52

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

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

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

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

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

 1
Author: LazyOne, 2011-06-12 10:00:13

Вы можете много прочитать об этом на php.net/header , но для принудительной загрузки вы можете использовать заголовок принудительной загрузки. Этот комментарий потрясающий, проверьте его! :-)

 0
Author: Jan Dragsbaek, 2011-06-12 09:58:31

Вот как загрузить 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);
    }
?>

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

 0
Author: Raymond, 2017-01-10 00:05:48