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; } ?>
Вы должны загружать содержимое файлов, записывать контент в запрос и устанавливать заголовки так, чтобы он анализировался как загрузка силы или поток октетов.
Например:
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(); ?>
Этот код работает без каких-либо изменений. Хотя для этого требуются проверки и некоторые функции безопасности.
Сервер каким-то образом идентифицирует файл, который должен быть выполнен, а не загружен. Вы должны исключить файл .php, который хотите загрузить из этой обработки. Проще всего, вероятно, переименовать файл в .php.txt.
В противном случае вы должны иметь возможность настроить сервер на то, чтобы не обрабатывать этот конкретный файл, или путь был указан. Как вы это делаете, зависит от того, на каком сервере вы работаете.
Если такой файл php находится на том же сервере / веб-сайте, просто откройте его как обычный файл, например $fileContents = file_get_contents($filename);
Если файл находится на другом сервере, у вас есть несколько возможных вариантов:
1) Доступ к нему через FTP (если у вас есть данные для входа и доступ)
2) У вас есть специальное правило перезаписи URL-адресов на этом сервере, которое somefile.php.txt
веб-серверу отправлять файл в виде обычного текста вместо его выполнения (например, somefile.php.txt
)
3) Имейте специальный скрипт на этом сервере и передав имя файла в качестве параметра, он вернет содержимое этого файла (например, http://example.com/showfile.php?file=somefile.php
)
Вы можете прочитать много об этом на php.net/header , но чтобы принудительно загрузить, вы можете использовать заголовок для загрузки. Этот комментарий потрясающий , проверьте это! 🙂
Вот как загрузить файл 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); } ?>
Надеюсь, это поможет вам бросить 🙂