Un script PHP en ligne de commande pour activer // désactiver le wifi sur un modem D-Link DSL-2640B. Cela permet d’illustrer un peu l’intérêt de faire du scripting …
Je ne ferais pas de commentaires, mais n’hésitez pas à poser des questions …
#!/usr/bin/php <?php //Variable definition // //router $login = 'admin'; $password = 'admin'; $ip = '192.168.1.1'; // //wifi $wifi = array( // /!\ don't touch this /!\ 'wlSsidIdx' => 0, 'wlEnbl' => 1, 'wlCountry' => 'GB', 'wlBasicRate' => '', //ssid name 'wlSsid' => 'monSuperRéseauxWifi', //0 = visible, 1 = hide 'wlHide' => 0, //number of chanel or 0 for auto selection 'wlChannel' => 1, //Transmission Speed 'wlRate' => 0, //wifi mode 0=802.11b only, 1=Mixed 802.11g and 802.11b, 4=802.11g only 'wlgMode' => 4, 'wlWpaGTKRekey' => 750, 'wlWpa' => 'aes', 'wlAuthMode' => 'psk2', //authentification mode : 0 = none, 1 = wep, 2 = auto (wpa or wpa2), 3 = wpa2 only, 4 = wpa only 'wlAuth' => 0, 'wlWpaPsk' => 'masuperclefdelamortquitue', 'wlWep' => 'disabled', 'wlPreauth' => 0 ); ///////////////////// class cli { const LINE_BREAK = "\r\n"; const LINE_NO_BREAK = ''; const LINE_RETURN = "\r"; const LINE_NOTHING = ' '; protected $_TEMP = 250000;//1/4 of seconds protected $_MULTIPLICATOR = 4; //1/4 -> 4 protected $_LENGTH = 60; protected function _write_empty_space($lng) { while($lng < $this->_LENGTH) { echo ' '; $lng++; } } protected function _echo($message, $break) { echo $message, $break; if ($break == self::LINE_NO_BREAK) { $this->_write_empty_space(strlen($message)); } } protected function _sleep($second) { $second = $second * $this->_MULTIPLICATOR; $i = 0; $j = 0; while ($i < $second) { usleep($this->_TEMP); if ($i % 4) { $this->_echo('.', self::LINE_NOTHING); $i++; } else { if($j % 2) { $this->_echo('', self::LINE_RETURN); $this->_write_empty_space(0); $this->_echo('', self::LINE_RETURN); } else { $this->_echo('Please wait', self::LINE_NOTHING); $i++; } $j++; } } $this->_echo('', self::LINE_RETURN); } } class wifi extends cli { protected $_ch; protected $_baseUrl; public function __construct($wifi, $ip, $login, $password, $activation) { $this->_baseUrl = 'http://' . $ip . '/'; $this->_ch = curl_init(); curl_setopt($this->_ch, CURLOPT_HEADER, false); curl_setopt($this->_ch, CURLOPT_RETURNTRANSFER, true); $this->_auth($login, $password); $activation = intval($activation); if ($activation == 1) { $this->_activation($wifi); } else { $this->_disactivation($wifi); } } public function __destruct() { curl_close($this->_ch); } protected function _activation($wifi) { $this->_echo('Activation ...', self::LINE_NO_BREAK); $wifi['wlBasicRate'] = ($wifi['wlgMode'] == 4) ? 'wifi2' : 'default'; $this->_doQuery($this->_baseUrl . 'wirelesssetting.wl?' . http_build_query($wifi, '', '&')); $this->_sleep(5); } protected function _disactivation($wifi) { $this->_echo('Disactivation ...', self::LINE_NO_BREAK); $wifiDown = array( 'wlEnbl' => 0, 'wlSsidIdx' => $wifi['wlSsidIdx'], 'wlCountry' => $wifi['wlCountry'], ); $this->_doQuery($this->_baseUrl . 'wirelesssetting.wl?' . http_build_query($wifiDown, '', '&')); $this->_sleep(5); } protected function _doQuery($url, $post = '') { curl_setopt($this->_ch, CURLOPT_URL, $url); if (!empty($post)) { curl_setopt($this->_ch, CURLOPT_POST, true); curl_setopt($this->_ch, CURLOPT_POSTFIELDS, $post); } else { curl_setopt($this->_ch, CURLOPT_HTTPGET, true); } if(curl_exec($this->_ch) === false) { $this->_echo('', self::LINE_BREAK); $this->_echo('Error Curl : ' . curl_error($this->ch), self::LINE_BREAK); } else { $this->_echo('DONE', self::LINE_BREAK); } } protected function _auth($login, $password) { $this->_echo('Authentification ...', self::LINE_NO_BREAK); $post = array( 'username' => $login, 'password' => $password ); $this->_doQuery($this->_baseUrl . 'index.html', http_build_query($post, '', '&')); } } if ($argc != 2) { echo ' synthaxe : scriptname.php 1 for activation or 0 for desactivation '; exit(); } new wifi($wifi, $ip, $login, $password, $argv[1]); # EOF
Certes, le script ne gère pas tout, mais le but était de jouer avec la ligne de commande tout en n’allant pas dans les extensions exotiques de gestion de celle-ci ….
Un planet sur Zend Framework, pour les francophones est née!
Tout d’abord qu’est-ce qu’un planet?
Un planet est un agrégateur de flux rss concernant un même sujet. Le but est de promouvoir mais surtout de concentrer les articles publié sur le sujet.
Pour ceux qui désirerait y goûter, je vous renvoi vers le site : zf planet
N’hésitez pas à demander a en faire partie.
Dans la plupart des cas lorsque l’on affiche un listing provenant d’une requête sql on aimerait pouvoir offrir le tri à l’utilisateur. Dans l’article qui suit, je vous propose de découvrir une manière de le faire assez facilement.
Tags: PHP, programmation, ZF
Ceci est une note rapide … j’espère produire un article plus intéressant une autre fois …
Nous allons regarder les bases de l’auto-complétion avec ZF et Dojo. Dojo simplement parce qu’il est le mieux intégré des frameworks javascript. Sachant que pour l’instant seul jQuery et Dojo sont intégré
Le code
application/views/scripts/test/index.phtml
<?php $this->dojo()->enable(); //activation de dojo echo $this->comboBox( 'toto', //id html de l'élément '', //valeur par défaut array( 'autocomplete' => true, //activation de l'auto-complétion 'store' => 'stateStore', 'storeType' => 'dojo.data.ItemFileReadStore', 'storeParams' => array('url' => $this->baseUrl('/test/records')), //url où les données JSON sont récupérée 'searchAttr' => 'title', //donnée recherchée pour remplir le combobox ) ); ?>
application/layoutes/scripts/layout.phtml
// ... if ($this->dojo()->isEnabled()) //Évite les chargement inutile .... { $this->dojo()->setDjConfigOption('isDebug', (APPLICATION_ENV == 'development')); //affiche une console de deboguage si on est en mode dev $this->dojo()->setDjConfigOption('usePlainJson', true); //utilise du json texte $this->dojo()->setLocalPath($this->baseUrl('/themes/js/dojo/dojo/dojo.js')); //chemin vers les fichier dojo $this->dojo()->addStyleSheetModule('dijit.themes.tundra'); //thème à chargé echo $this->dojo(); //affichage du tout ... } // viennent ensuite nos jabvascript, css, etc //... //</head> // ne pas oublier la class tundra dans le body <body class="tundra"> //...
application/Bootstrap.php
//... //dans _initView() //dojo Zend_Dojo::enableView($view); //...
application/controllers/TestController.php
<?php class TestController extends Zend_Controller_Action { public function indexAction() { } public function recordsAction() { // on désactive l'affichage $this->_helper->layout()->disableLayout(); //on va cherchée les données et les met dans un objet Zend_Dojo_Data $book = new Default_Model_DbTable_Book(); $dojo = new Zend_Dojo_Data('title', $book->fetchAll()); echo $dojo->toJson(); // on sort ... c'est pas joli mais en attendant cela fonctionne! exit(); } } # EOF
Choses à retenir comprendre
Les choses à retenir :
- storeParams est l’url où les donnée au format JSON seront prise
- searchAttr est l’élément qui va servir pour recherchée les données dans la masse de donnée JSON
- ne pas oublier de mettre la class css ‘tundra’
- Dojo peut, via ses styles css modifier votre rendu …
Remarque
Version de ZF : 1.9.6
Version de Dojo (fourni avec zf dans extras) : 1.3
Tags: découverte, js, PHP, programmation, web, ZF
Il y a des moment où l’on se dit que la doc est vraiment incomplète … Voici un exemple assez tordu…
Rappel
- L’aide de vue (view helper) cycle permet d’alterner des valeurs dans la vue,
- L’aide de vue partialLoop permet de faire une boucle sur une vue (fichier) afin de l’incorporer dans un autre fichier…
Utilisation
Pour utiliser les deux ensembles, par exemple dans le cas d’un listing dont la sortie serait dans un tableau, il vous suffit de définir les valeurs assigner au cycle avant de faire le partialLoop.
Exemple :
Vue views/scripts/membres/listing.phtml
<table class="table"> <thead> <tr> <th>Nom</th> <th>Prénom</th> <th>Adresse</th> <th>Code postal</th> <th>Ville</th> <th>Pays</th> <th>Téléphone</th> </tr> </thead> <tbody> <?php $this->cycle()->assign(array('tr_1', 'tr_2', 'tr_3'), '_user_listing'); echo $this->partialLoop('utilisateurs/_user_list_listing.phtml', $this->entries); ?> </tbody> </table>
Vue views/scripts/utilisateurs/_user_list_listing.phtml
<tr class="<?php echo $this->cycle(array(),'_user_listing')->next()?>"> <td><?php echo $this->escape($this->name) ?></td> <td><?php echo $this->escape($this->firstName) ?></td> <td><?php echo $this->escape($this->Addrese) ?></td> <td><?php echo $this->postCode ?></td> <td><?php echo $this->escape($this->cityName) ?></td> <td><?php echo $this->escape($this->countryName) ?></td> <td><?php echo $this->tel_prefix ?></td> </tr>
Tags: découverte, programmation, trucs et astuces, web, ZF
FlashMessanger est à la base un action helper, donc confiné au contrôleur. Celui-ci permet de passer un message d’une page à l’autre via le mécanisme des sessions . Après un formulaire on doit souvent ajouter un message de confirmation, on peux par exemple utilisé le FlashMessenger pour le faire et ainsi au ré-affichage suivant afficher ce message! C’est tellement pratique qu’il est dommage de ne pas pouvoir l’utiliser a travers les vue (view) de manière automatique…
Je vous propose donc de l’utiliser via un view helper!
Tags: PHP, programmation, trucs et astuces, web, ZF
Zend Framework possède divers mécanismes de sécurisation, parmi ceux-ci l’on trouvent les validateurs. Ces validateurs vérifie que la ou les données à validées sont valide et par là même sécurise celle-ci.
Dans notre cas nous allons nous intéresser aux sessions et plus particulièrement à la validation de celle-ci au moment de sont démarrage, ceci afin de, par exemple, empêcher le diminuer les possibilités de vol de celle-ci. Nous allons créer un validateur d’ip … (oui je sais y a moyen de passer outre, si on derrière un proxy gnagnagna …. mais ici c’est un exemple!).
Tags: PHP, programmation, web, ZF
Openvibe everywhere in the future?
Pour le titre j’aurais pu mieux faire
Donc commençons ma réflexion du jour …
Openvibe est un logiciel permettant de faire du BCI c’est-à-dire un logiciel permettant d’utiliser sont cerveaux comme interface d’accès à un ordinateur remplaçant ainsi une souris ou un clavier… Les ondes qu’émet le cerveau sont captés par des capteurs et traité en un signal utilisable pour le logiciel d’interphasage. Ce genre de logiciel permet le contrôle -expérimental- de chaise roulante ou d’un tas d’autres trucs …. (suffit de chercher et youtube regorge de vidéo à ce sujet).
Ceci fait très sciences-fiction mais c’est la réalité d’aujourd’hui et se sera le quotidien de demain, sachant qu’il existe déjà des produits commerciaux pour jouer! Mais côté sciences-fiction cela n’est rien comparé à l’ordinateur biologique! Ordinateur fonctionnant avec une interaction d’enzyme et d’ADN. D’après ce que j’ai lu, les dernières recherches en était « seulement » à la conception de puce mémoire stockant l’information sur l’ADN.
À force de voir ce genre de choses j’en vient à me dire que dans le futur les interfaces BCI devrait se généraliser et permettre ainsi d’imaginer un téléphone dont le clavier serait supprimé et où il ne resterait que : un haut parleur et un micro … ou encore, avec la bio-informatique, l’homme bio-informatisé, et pourquoi pas tel qu’on le voit dans les livres de Hamilton (L’étoile de pandore), des « tatouage » informatique permettant d’étendre les possibilités de l’homme!
Voilà c’était la petite réflexion du jour, le délire futuris d’un fou, maintenant j’attends vos commentaires … ou alors j’écouterai vos ricanements ou vos pas lorsque vous vous encourerez.
ps : oui je sais aucune référence …. mais j’ai la flemme ….
Tags: découverte, future