web-dev-qa-db-fra.com

Comment télécharger un fichier php sans l'exécuter?

je travaille sur un système de gestion de contenu car je dois télécharger un fichier php en utilisant le code php sans exécuter. Quelqu'un peut m'aider à ce sujet

c'est quelque chose comme ftp. J'ai ajouté les options pour télécharger, éditer et télécharger un fichier. ça fonctionne bien. mais lors du téléchargement d'un fichier php, il est exécuté au lieu de télécharger ...

Ce que j'ai essayé, c'est:

<?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;
}
?>
12
Jagadeesan

Vous devez charger le contenu des fichiers, écrire le contenu dans la demande et définir les en-têtes de manière à ce qu'il soit analysé comme un téléchargement forcé ou un flux d'octets. 

Par exemple: 

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

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

Ce code fonctionne sans aucune modification. Bien qu'il nécessite une validation et certaines fonctionnalités de sécurité. 

20
rzetterberg

Le serveur identifie en quelque sorte le fichier qui doit être exécuté au lieu d'être téléchargé. Vous devez exclure le fichier .php que vous souhaitez télécharger de cette gestion. Le plus simple est probablement de renommer le fichier en .php.txt.

Sinon, vous devriez pouvoir configurer le serveur pour qu'il ne traite pas ce fichier particulier, ou le chemin où il se trouve. Cela dépend du serveur que vous utilisez.

2
Anders Abel

Voici comment télécharger un fichier php au lieu de l'exécuter.

Croyez-moi cela fonctionne! ..télécharger le fichier php avec risque personnel :)

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

J'espère que cela vous aide, mon frère :)

1
Raymond

Si un tel fichier php se trouve sur le même serveur/site Web, ouvrez-le simplement en tant que fichier normal, par exemple. $fileContents = file_get_contents($filename);

Si le fichier se trouve sur un autre serveur, vous avez peu de possibles options:

1) y accéder via FTP (si vous avez les informations de connexion et l'accès)

2) Avoir une règle de réécriture d'URL spéciale sur ce serveur qui demandera au serveur Web d'envoyer le fichier sous forme de texte brut au lieu de l'exécuter (par exemple, somefile.php.txt)

3) Avoir un script spécial sur ce serveur et en passant le nom de fichier en tant que paramètre, il retournera le contenu de ce fichier (par exemple, http://example.com/showfile.php?file=somefile.php)

1
LazyOne

Vous pouvez en lire beaucoup sur php.net/header , mais pour forcer un téléchargement, vous pouvez utiliser un en-tête de force-download. Ce commentaire est incroyable , jetez-y un œil! :-)

0
Jan Dragsbaek