Question

Bonjour, j'essaie de rediriger tous les liens vers n'importe quel fichier PDF de mon site vers une page contenant un formulaire qui collecte les informations de l'utilisateur avant de pouvoir télécharger/afficher le PDF.

Par exemple

Je souhaite rediriger les fichiers *.pdf du site Web vers request.php?file=name_of_pdf_being_redirected

Où request.php est la page contenant le formulaire demandant quelques détails avant de continuer.

Tous les fichiers PDF du site sont conservés dans le dossier /pdf.

Des idées?

MODIFIER:désolé, j'utilise Apache sur le serveur.

OK j'y arrive :Je le fais fonctionner maintenant en utilisant :

Réécriture sur la réécriture ^ pdf /(.+. Pdf) $ request.php? File = / 1 1 [r

Mais maintenant, quand je vais sur la page de téléchargement et que je veux laisser la personne télécharger le fichier, ma nouvelle règle consiste à renvoyer le lien de téléchargement vers le formulaire :-P haha, il y a donc de toute façon pour lui permettre de télécharger le fichier une fois le formulaire rempli. été soumis et vous êtes sur download.php ?

Était-ce utile?

La solution

Vous pouvez essayer ceci :

  • Déplacez vos fichiers vers un dossier "en dehors" de votre racine Web afin que personne ne puisse y accéder via un navigateur.
  • Utiliser des sessions pour détecter si une personne a rempli le formulaire ou non
  • Utilisez un script de téléchargement de fichiers alimenté par PHP.Dans sa forme la plus naïve, cela pourrait ressembler à ceci :
    if ( isset( $_SESSION[ 'OK_TO_DOWNLOAD' ] ) == false )
    {
        header( "Location: must_fill_this_first.php" );
        exit( 0 );
    }

    header( "Content-type: application/pdf" );
    // double check the above, google it as i am not sure

    echo file_get_contents( 'some_directory_inaccessible_thru_www/' . $_GET[ 'pdf_name' ] );
    // ideally a binary-safe function needs to be used above

Il s’agit d’une technique éprouvée que j’ai utilisée sur un site Web.L’exemple de code est un brouillon et doit être affiné.

Autres conseils

Des idées ?Vous pouvez commencer par nous indiquer quel serveur Web/application vous utilisez, cela pourrait aider :-)

Dans Apache, vous devriez pouvoir utiliser un RewriteRule pour transformer la requête en une forme différente.Par exemple, en tournant /pub/docs/x.pdf dans request.php?file=/pub/docs/x.pdf pourrait être fait avec quelque chose comme:

RewriteRule ^/pdf/(.*)\.pdf/  request.php?file=/$1.pdf

Gardez à l'esprit que c'est de mémoire (six ans depuis que j'ai touché Apache et que je suis toujours propre :-), le format peut être légèrement différent.

Mise à jour:

Maintenant que vous avez réglé le problème, voici quelques options pour votre prochain problème.

1/ Renommez les PDF pour avoir une extension différente afin qu'ils ne soient pas soumis à la règle de réécriture.Ils doivent être configurés pour transmettre le même type MIME au client afin qu'ils s'ouvrent dans le choix de visionneuse du client.

2/ Effectuez également le téléchargement dans le cadre du script, et non comme un accès direct au PDF.Puisque la soumission du formulaire est une requête HTTP, vous devriez pouvoir y répondre immédiatement avec le contenu du PDF plutôt que de le rediriger encore à la page de téléchargement.

Cette deuxième option serait mon choix car :

  • empêche les gens de comprendre qu'ils peuvent accéder aux fichiers PDF simplement en demandant xx.pdfx au lieu de xx.pdf.
  • permet à la personne d'obtenir le PDF plus rapidement (elle n'a pas besoin de cliquer à nouveau sur le lien).

Notez que ma réponse concerne un site Web .NET, mais je suis sûr que les mêmes constructions existent quelque part en PHP.

J'aurais un HTTPModule avec un chemin de *.pdf qui fait simplement un Response.Redirect vers request.php?...etc (dans mon cas request.aspx) Et puis dans le gestionnaire d'événements pour le bouton, cliquez sur cette page, lorsque vous savez quel pdf afficher et qu'il est autorisé, faites simplement un Response.ContentType = [type MIME de pdf], puis Response.WriteFile(pdfFile), et enfin Response.End().

Il y a d'autres choses que vous pouvez ajouter pour l'améliorer, comme la taille du fichier, etc.Mais dans le cas minimal, cela fonctionnerait.Si vous voulez le code en C#, je pourrais trouver quelque chose en 3 minutes environ, mais en PHP, je suis assez perdu.Je commencerais par chercher des HTTPModules et comment les écrire en PHP.

La recherche sur Google de « PHP HTTPModule » conduit à ceci : Équivalent des HttpModules ASP.NET en PHP donc, je me trompe peut-être un peu, mais j'espère que c'est un point de départ.

Utilisez un fichier .htaccess si vous utilisez un serveur Web Apache.Vous devrez vous assurer que mod_rewrite est activé, mais une fois que vous l'aurez fait, vous pourrez réécrire tous les fichiers en utilisant ces deux lignes simples :

Réécriture sur la réécriture ^ .pdf $ /wrewrite.php [nc, l

Si vous utilisez IIS, vous pouvez accomplir quelque chose de similaire en utilisant ISAPI_Rewrite.

Votre autre alternative consiste à placer vos fichiers PDF dans un répertoire qui n'est pas accessible au public. Toute demande faite pour une ressource PDF renverrait une erreur d'accès refusé et les fichiers ne seraient accessibles que via le script de téléchargement approprié.

if($user==authenticated){
 //set pdf headers
 echo file_get_contents('actual.pdf');

aucun mod ne réécrit, cache la source réelle et c'est ce que je fais normalement - j'espère que cela aide

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top