Derniers snippets
Gestion des tags en SQL
Un schema classique de gestion de tags :
CREATE TABLE Project ( project_id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, url TEXT NOT NULL, PRIMARY KEY (project_id) ) ENGINE=MyISAM; CREATE TABLE Tags ( tag_id INT UNSIGNED NOT NULL AUTO_INCREMENT, tag_text VARCHAR(50) NOT NULL, PRIMARY KEY (tag_id), INDEX (tag_text) ) ENGINE=MyISAM; CREATE TABLE Tag2Project ( tag INT UNSIGNED NOT NULL, project INT UNSIGNED NOT NULL, PRIMARY KEY (tag, project), INDEX rv_primary (project, tag) ) ENGINE=MyISAM;
Pour récupérer tous les projets taggué php ou mysql :
SELECT p.name FROM Project p INNER JOIN Tag2Project t2p ON p.project_id = t2p.project INNER JOIN Tag t ON t2p.tag = t.tag_id WHERE t.tag_text IN ('mysql', 'php');
Pour récupérer tous les projets taggué php et mysql :
SELECT p.name FROM Project p CROSS JOIN Tag t1 CROSS JOIN Tag t2 INNER JOIN Tag2Project t2p ON p.project_id = t2p.project AND t2p.tag = t1.tag_id INNER JOIN Tag2Project t2p2 ON t2p.project = t2p2.project AND t2p2.tag = t2.tag_id WHERE t1.tag_text = "php" AND t2.tag_text = "mysql";
Tiré et adapté de la présentation Join-fu de Jay Pipes
Cross apps url helper for symfony 1.0
Here's a helper that allow to generate cross apps urls in symfony 1.0
/** * Generates cross-apps urls in symfony 1.0 * * @param string the app we want to go to * @param string the route in the app. Must be valid * @param array the arguments required by the route. Optional * @return string */ function cross_app_url($app, $route, $args = null) { $host = sfContext::getInstance()->getRequest()->getHost() ; $env = sfConfig::get('sf_environment'); $appRoutingFile = SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.$app.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'routing.yml' ; $route = substr($route, 1, strlen($route)) ; if (file_exists($appRoutingFile)) { $yml = sfYaml::load($appRoutingFile) ; $routeUrl = $yml[$route]['url'] ; if ($args) { foreach ($args as $k => $v) { $routeUrl = str_replace(':' . $k, $v, $routeUrl) ; } } if (strrpos($routeUrl, '*') == strlen($routeUrl) - 1) { $routeUrl = substr($routeUrl, 0, strlen($routeUrl) - 2) ; } } return sprintf('http://%s/%s/%s', $host, ($env == 'dev' ? $app . '_dev.php' : ($app != $main_app) ? $app : ''), $routeUrl); }
Adapted from here
Passer outre le "allow_url_fopen et allow_url_include" a Off
Qui n'a jamais eu un Warning de type : "filegetcontents() function.file-get-contents: URL file-access is disabled in the server configuration in % on line %" sur un hebergement mutualisé ?
la solution et d'utiliser lynx en ligne de commande pour attaquer une url, on utilisera la fonction exec(), exemple avec l'api GoogleMaps
<?php define('GOOGLE_API_KEY', 'your_google_api_key_here'); $wsurl = 'http://maps.google.com/maps/geo?q=%s&output=csv&key=%s'; $location = 'Paris, France'; $data = explode(',', exec('lynx --dump \''.sprintf($wsurl, urlencode($location), GOOGLE_API_KEY).'\'')); /*** Au lieu de ***/ $data = explode(',', file_get_contents(sprintf($wsurl, urlencode($location), GOOGLE_API_KEY))); $coord = 200 === (int)$data[0] ? array((float)$data[2], (float)$data[3]) : null; var_dump($coord); ?>
Logger compatible Firebug et Opera Console
Une petite fonction qui permet de logguer dans la console de Firebug ou d'Opera, sans déclencher d'erreur si ces derniers sont indisponibles.
function log() { try { console.log.apply(console, arguments); } catch(e) { try { opera.postError.apply(opera, arguments); } catch(e) { } } } log("Voici un objet: %o", {toto: "tata", coucou: true});
Extraire toutes les chaînes d'un fichier binaire
En fait, c'est tout bête (mais qu'est ce que ça peut être utilie !) :
$ strings /usr/bin/iconv
Written by %s.
char
UCS-4
conversion from %s unsupported
conversion to %s unsupported
conversion from %s to %s unsupported
try '%s -l' to get the list of supported encodings
[...]
Convertir un timestamp unix en ligne de commande
C'est bête mais ça peut toujours servir.
$ date -r 1204748227
Wed Mar 5 12:17:07 PST 2008
Créer un patch SVN et l'appliquer
Pour mémoire, voici la méthode pour créer un patch depuis un dépôt subversion et l'appliquer sur un autre checkout de ce même dépôt :
$ cd /path/to/instance/1
$ svn diff /tmp/diff.patch
$ cd /path/to/instance/2
$ patch -p0 -i /tmp/diff.patch
Supprimer les espaces des noms de fichier
Pour supprimer tous les espaces des noms de fichier récursivement :
$ find . -type f -regex ".*\ .*" \
-exec bash -c 'echo "$1";mv "$1" "${1// /-}"' '{}' '{}' \;
(via maboite.org)
Déplacement récursif SVN avec xargs
Pour déplacer n fichiers php d'un dépôt subversion :
$ find . -name *.php | xargs -I % svn mv "%" trunk/
On notera qu'on peut appliquer le principe pour toute commande dont l'ordre des arguments est exotique.
Lire les mails en texte brut sous OS X avec Mail.app
Ouvrir un terminal et taper :
$ defaults write com.apple.mail PreferPlainText -bool TRUE




