Opaze

Aller au contenu | Aller au menu | Aller à la recherche

jeudi 17 juillet 2008

Entêtes HTTP pour l'envoi de fichiers à la sortie standard

Envoyer un fichier à la volée depuis un script PHP vers un navigateur client n'est pas forcément chose difficile mais peut très vite tourner à la crise de nerf... 

Problème rencontré : le téléchargement du fichier est bien proposé sous Firefox mais impossible de faire fonctionner la même chose sous Internet Explorer !! Pourquoi ? Parce qu'IE est restrictif (Firefox est à l'inverse bien plus permissif) et qu'il faut savoir lui parler correctement...

Le code suivant fonctionne sous Firefox mais pas sous IE :

header( 'Content-type: application/zip');
header( 'Content-length: '.$iSize );
header( 'Content-disposition: attachment; filename="'.$sNomFichier.'"');

Pour que l'envoi du fichier fonctionne sous IE, il est important de lui envoyer les bonnes entêtes HTTP :

header( 'Pragma: public' );
header( 'Content-Description: File Transfer' );
header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
header( 'Content-Transfer-Encoding: binary' );
header( 'Expires: 0' );
header( 'Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT' );
header( 'Cache-Control: private', false );
header( 'Content-type: application/zip' );
header( 'Content-length: '.$iSize );
header( 'Content-disposition: attachment; filename="'.$sNomFichier.'"' );

Ces entêtes sont données pour l'envoi d'un fichier Zip ("Content-type: application/zip"). A vous d'adapter ce code en indiquant le type MIME correspondant au fichier que vous devez envoyer !

dimanche 30 mars 2008

Activation du serveur Apache et PHP sous Leopard

Dans la dernière version de Mac OS X (10.5 alias Leopard) est inclut PHP 5. À cette date c'est actuellement la version 5.2.5 qui est installée. Apache est toujours de la partie mais cette fois en version 2.

macyb:~ Cyb$ apachectl -v
Server version: Apache/2.2.8 (Unix)
Server built:   Feb 20 2008 12:01:56

macyb:~ Cyb$ php -v
PHP 5.2.5 (cli) (built: Feb 20 2008 12:30:47) 
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

Cela simplifie déjà une bonne partie de l'installation.

Pour activer Apache il n'y a rien de plus simple. Rendez-vous dans les Préférences système puis dans Partage. Ensuite activez le Partage web. La pastille passe au vert, apache vient d'être lancé. Lancez un navigateur avec http://localhost/ comme URI. Magnifique ! La page par défaut d'apache : on peut continuer.

Dans la configuration d'Apache, le module PHP n'est pas chargé par défaut. Voici comment y remédier :

macyb:~ Cyb$ sudo vi /etc/apache2/httpd.conf 

WARNING: Improper use of the sudo command could lead to data loss
or the deletion of important system files. Please double-check your
typing when using sudo. Type "man sudo" for more information.

To proceed, enter your password, or type Ctrl-C to abort.

Password:

Une fois votre mot de passe entré, cherchez dans le fichier la ligne suivante :

#LoadModule php5_module        libexec/apache2/libphp5.so

Décommentez-la et enregistrez (echap, puis :wq). Rechargez apache.

macyb:~ Cyb$ sudo apachectl restart

Si vous avez été attentifs lors de l'activation d'apache, vous avez remarqué qu'il y a un site global pour la machine et un site pour chaque utilisateur. Le tilde n'étant pas très sexy dans une URI, on va s'intéresser au site de la machine. Son emplacement est dans /Library/WebServer/Documents/ ou directement via le Finder Bibliothèque -> WebServer -> Documents. Supprimez le contenu du dossier. Créez un fichier de test nommé index.php qui contient le phpinfo :

<?php
phpinfo();
?>

Retournez dans votre navigateur et actualisez. Vous devez visualiser à présent le détail de la configuration de PHP.