27/05/2009

Serveur Lighttpd avec PHP sur iPhone

Un script PHP exécuté directement sur l'iPhone avec un serveur LighttpdToujours avoir un petit serveur HTTP dans sa poche, c’est possible! C’est même très pratique pour toujours avoir des fichiers sous la main accessibles simplement en HTTP et d’autres utilisations illicites 😀

Nous allons voir comment installer un serveur Lighttpd (alternative à Apache), avec PHP sur un iPhone 2.2.1 jailbreaké.

Installation

Logo de LighttpdGrâce à Cydia ou Icy, installez les packages suivants:

  • OpenSSH un des indispensables du hacker iPhone, il lance un serveur SSH sur celui-ci (l’iPhone, pas le hacker xD)
  • Lighttpd est le serveur HTTP à proprement parler. Très léger et sous license libre (BSD), c’est une très bonne alternative à Apache
  • PHP: Hypertext Preprocessor que nous lierons à Lighttpd dans la configuration

Configuration

Redémarrez et connectez-vous en ssh à votre iPhone, le mot de passe par défaut est alpine.

ssh root@iPhone.local

D’abord créons tous les répertoires utiles:

mkdir /etc/lighttpd/ /etc/lighttpd/logs/ /etc/lighttpd/htdocs/

Configurons Lighttpd :

nano /etc/lighttpd/lighttpd.conf
server.document-root = "/etc/lighttpd/htdocs"
server.port = 80

server.tag ="lighttpd"
server.errorlog = "/etc/lighttpd/logs/error.log"
accesslog.filename = "/etc/lighttpd/logs/access.log"

server.modules = ("mod_access","mod_accesslog","mod_fastcgi","mod_rewrite","mod_auth","mod_fastcgi")

index-file.names = ( "index.html", "index.php" )

#Configuration PHP
fastcgi.server = (".php" =>
        ("localhost" =>
                ("bin-path" => "/usr/bin/php-cgi",
                "socket" => "/tmp/php.socket")
        )
)

Lighttpd est bien sûr un serveur tout à fait standard largement utilisé sur le web : vous pouvez adapter sa configuration selon vos moindres désirs.

Lancer le serveur

Il ne reste plus qu’à lancer le serveur en une petite ligne de commande. Je n’ai pas trouvé d’interface graphique qui permette de le faire simplement.

lighttpd -f /etc/lighttpd/lighttpd.conf

Créons un petit fichier PHP pour voir si tout marche bien:

nano /etc/lighttpd/htdocs/index.php
<?php $who = 'Geekfault';
echo 'Hello, '.$who.'.'; ?>

La configuration Lighttpd décrite ici permet de se connecter à votre iPhone avec tous les hostnames qui lui sont affectés: iPhone.local, localhost, adresse IP, …

MySQL ?

Il n’est malheureusement pas possible pour l’instant de faire tourner un serveur MySQL sur l’iPhone et, pire, le PHP proposé est compilé sans le mod_mysql, ce qui empêche même les connexion MySQL à un serveur distant.

Il faudra se contenter de SQLite. Dommage.

Source

  1. AlcoolGeek
    | #1

    salut salut je viens de découvrir ce tuto et j’ai un soucis :
    Quand je veut lancer le serveur avec “lighttpd -f /etc/lighttpd/lighttpd.conf” il me met un message d’erreur sur mon terminal en me disant “(network.c.300) can’t bind to port : 80 Permission Denied”.

    Es ce que par hasard tu aurais une idée du soucis en question ? j’ai un iTouch 2G au cas où :/

  2. AlcoolGeek
    | #2

    heu .. désolé, j’avais oublié de me mettre en root -_-“

  3. | #3

    Tout est résolu donc? 🙂 Sinon il faut changer le port (server.port = 80) dans lighttpd.conf

  4. | #4

    Salut, d’abord merci beaucoup pour ce tuto, il est génial !
    j’ai une simple question, comment désactiver le serveur ?
    j’ai téléchargé ‘top.app’ pour kill un process mais je trouve pas de lighttpd! de même rien dans SBsettings.
    C’est juste qu’il bouffe environ 11MB de RAM et que j’en ai pas besoin toujours.

    Merci d’avance!

  5. | #5

    Le serveur n’est lancé que quand tu fais

    lighttpd -f /etc/lighttpd/lighttpd.conf

    Pour le couper, c’est moins évident effectivement. Il faut récupérer son pid (avec top, installable dans Cydia) et puis faire un petit

    kill PID

    Une autre solution consiste à lancer le serveur avec l’option -D pour qu’il ne passe pas en background : un Ctrl+C ou une déconnexion du SSH suffit à le tuer. Il y a aussi moyen d’installer screen, c’est très pratique.

    lighttpd -Df /etc/lighttpd/lighttpd.conf
  6. DoOn
    | #6

    Bonjour à tous!
    J’ai remarqué que lorsque que je lance l’adresse http://localhost/ à partir de mon iphone ça fonctionne parfaitement. Par contre si je suis connecté avec un ordi sur le même réseau local que mon iphone en WIFI et que je lance l’adresse http://iplocaldeiphone/ le css lié à mes fichiers html ou php ne fonctionne pas. je vois le contenu mais plus de style sur la page…Savez-vous d’où vient la cause ?

  7. | #7

    Peut-être as-tu écrit en dur http://localhost/ dans les URL d’appel de tes feuilles CSS, ce qui ne marchera forcément pas depuis un autre ordinateur.

    Essaye de mettre les adresses des fichiers relativement à la page dans ton code source.

  8. BestPig
    | #8

    Merci, très intéressant comme tuto.

  9. Rob
    | #9

    Bonjour,

    Très intéressant votre tout mais je voulais avoir plus d’information sur ce tuto, car mon objectif et de crée une application qui fait appelle à un serveur web.
    Merci

  10. art
    | #10

    Bonjour,

    Pour ma part j’ai voulu réaliser toutes les étapes de ce tuto directement depuis l’iphone avec l’application MobileTerminal et toutes les commandes que cela implique (su alpine, apt-get install les packets nécessaires, nano).
    Seulement voilà, lorsque je veux lancer le serveur, j’ai le message d’erreur suivant me disant que le parser a échouer: “lighttpd.conf line: 4 pos: 31 parser failed somehow near: (EOL)

    Peut-être est-ce du au copy-paste que je fais directement du site au nano du mobile terminal?

  11. art
    | #11

    Je me réponds et cela pourra aider certain, il y a des caractères illégaux qui passent dans un copier coller depuis l’iphone sur le nano du mobile terminal.

    Il faut donc passer par un terminal depuis votre ordi (pc, mac, linux) et exécuter la commande suivante:

    scp /path/to/your/local/lighttpd.conf root@ip-address-of-your-idevice:/etc/lighttpd/lighttpd.conf

    puis saisissez votre mot de passe root qui est par défaut alpine

  12. | #12

    @art Merci d’avoir partagé ta solution 😉 C’est marrant que ce tuto fonctionne toujours 4 ans plus tard !

  1. Pas encore de trackbacks