PHP: Possible modifiers in regex patterns - Manual

#15790

Donc pour faire en sorte que les caractéristiques accentués soient pris en compte dans \w, il faut ajouter le flag "u" (en minuscule).

Retourne false :

preg_match('#\w#', 'é') 

Retourne true :

preg_match('#\w#u', 'é') 

http://php.net/manual/en/reference.pcre.pattern.modifiers.php

Note : PHP, file_get_contents et URL

#15487

Sur certains serveurs, file_get_contents(), copy() et quelques autres fonctions qui peuvent fonctionner avec des URL (chemins distants) ne marchent pas : la directive INI allow_url_fopen est mise à Off.

Pour palier à ça, on peut utiliser cURL pour récupérer le fichier. Sur les serveurs qui n’ont que cette directive mise à Off, cURL (s’il est installé) fonctionnera.

On utilisera alors ça :

// request
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 
$file_content = curl_exec($curl_handle);
curl_close($curl_handle);
// saving
file_put_contents($file_name, $file_content);


Dans les cas où le serveur bloque toutes les connexions sortantes, il n’y a pas de solutions pour faire des requêtes externes.

PNG Optimization with GD library

#15466

Quand on produit des PNG avec PHP/GD, les images sont rarement optimisées. Cette page donne quelques pistes.

Moi par exemple, je tente de reproduire ça en plus léger.
En somme, c’est une simple matrice 5x5 avec deux couleurs dans la palette.

Il me suffit d’ajouter ça, juste avant le imagepng() :

imagetruecolortopalette($image_ressource, false, 256);


La taille d’une icône 512x512 passe ainsi de 2 131 octets à 283 octets (~85% de réduction).

L’image passée dans optipng me revient à la même taille. Pour les icônes avec très peu de couleurs c’est donc idéal. Pour les autres png, voyez l’article.

http://perplexed.co.uk/1814_png_optimization_with_gd_library.htm

Note : PHP, imagerotate

#15429

Ok, donc "imagerotate" en PHP me donne un segfault si l’angle==360°.

[Sun May 22 20:01:30.476001 2016] [core:notice] [pid 1747] AH00052: child pid 14628 exit signal Segmentation fault (11)


Tout va bien

Visiblement je ne suis pas le seul : https://github.com/banister/devil/issues/13
Et j’ai aussi vu d’autres erreurs, dans d’autres langages (datant de 2010). La source serait dans les Lib en C utilisées.

http://lehollandaisvolant.net/?mode=links&id=20160522200404

GitHub - timovn/local-favicon-cache: Creates a local favicon cache using Google-Favicon grabber

#14936

Google possède un service (non documenté) pour trouver les favicons des sites : http://www.google.com/s2/favicons?domain=google.com

Mon script (PHP) constitue un cache local des favicons en utilisant le service de Google.
Je compte l’utiliser pour le lecteur RSS de Blogo.

Le truc bien c’est que c’est le serveur qui fait la requête vers Google, sans referer ni rien. Ce n’est pas l’utilisateur, donc c’est bien pour la vie privée.
Une fois qu’une requête chez Google est faite et que la favicon est en local, c’est l’icône locale qui est servie sans requête Google.

Il fonctionne en se basant sur le script de Mitsu pour Gravatar, c’est le même principe et pratiquement le même code : https://suumitsu.eu/wiki/doku.php?id=php:cache_gravatar

Note : rappel PHP

#14918

NEVER TRUST USER INPUT

C’est valable pour les formulaires POST et GET mais aussi plein d’autres choses :
– cookies
– variables de sessions
– noms de fichiers uploadés ($_FILES)
– les types de fichiers (dont MIME)
– variables dans le php.ini
– …

Sans oublier des vérifications spéciales dans certains cas : si la chaîne « . » (un simple point) est grammaticalement valable pour un pseudo ou un mot de passe, ça devient très dangereux quand il s’agit d’un nom de fichier (« . » c’est un raccourcis pour dire « dossier courant », comme « .. » signifie « dossier parent »).

Si en PHP vous avez un script pour renommer un fichier, un nouveau nom « . » sera valide pour le htmlspecialchars(). Mais au moment où le serveur transmet la requête « renomme le fichier abc.jpg en "." » au système d’exploitation ou au système de fichier, dans le meilleur des cas ça génère une erreur, dans le pire ça écrase le dossier courant et son contenu (le "." c’est le dossier courant et là on renomme un fichier par dessus).

Et pour supprimer un fichier, pareil : http://lehollandaisvolant.net/tuto/php/#supprimer-un-fichier


Enfin, l’utilisateur est toujours très con quand il s’agit d’utiliser un logiciel. Il fera toujours n’importe quoi, et encore plus si ça permet de faire planter l’ordinateur.
C’est très fatiguant de devoir penser à tout, comme ici avec la gestion du CSV http://sebsauvage.net/wiki/doku.php?id=csv . Heureusement, ici certains l’ont fait.

Si ce n’est pas le cas dans ce que vous faites, je conseille de ne pas avoir peur de faire une application limitée mais qui fonctionne plutôt qu’un truc illimité qui plante, même dans seulement 0,01% des cas : la loi de Murphy ne plante pas elle.

Par exemple, pour gérer les extensions de fichiers, je préfère dresser une liste avec les 20 extensions les plus communes (png, doc, jpg, mp3, apk…) et mettre tout le reste dans « autres », plutôt que d’essayer de détecter l’extension des fichiers (par régex ou autres).

Tôt ou tard, il y aura un urluberlu avec un nom de fichier de 500 caractères, ou avec une extension de 500 caractères, ou sans extensions, ou une extension en unicode, ou une extension en unicode-privé sur une fonte que vous n’avez pas, ou avec des caractères d’échappement.

Afficher 500 caractères ce n’est pas un soucis en soit, mais ça déforme l’affichage si l’absence d’espaces génère un non-retour à la ligne…

Ah et, si votre fichier est envoyé depuis GNU/Linux, il peut contenir des espaces et des caractères unicodes ou de la ponctuation. Windows n’aime pas ça et parfois il refusera d’enregistrer ce fichier au nom bizarre (ça dépend du système de fichier : FAT32 gère ça très mal en tout cas).

Bref, faut avoir une vision d’ensemble des chose : uploader un fichier, c’est pas juste une requête "files", c’est aussi penser à celui qui maintient caps-lock allumé quand il renomme ses photos avec des noms à rallonge sous Windows sur un clavier russe.

[ÉDIT] Note : astuce sécurité PHP - Le Hollandais Volant

#14906

Bon, mon code n’est toujours pas parfait : ici il y a un problème quand on utilise une réécriture .htaccess.

Par exemple chez moi, la page /contact redirige sur un post particulier (au format normalement /?d=2016/03/29…).
Le /contact ne marchait plus à cause de ce code.

Du coup je me suis rabattu sur un code bien plus simple : on teste simplement si l’URL demandée est constituée du nom du script courant directement suivi d’un slash :

if (strpos($_SERVER['REQUEST_URI'], $_SERVER['SCRIPT_NAME'].'/') === 0) {
	header('Location: '.$_SERVER['SCRIPT_NAME']);
	exit;
}


Ça semble marcher.


Rappel : ceci est utile/nécessaire car si on appelle l’URL « example.com/page.php/autre_chose, alors le serveur considère le fichier "autre_chose" situé dans le dossier "page.php".
Si "page.php" est un nom de dossier parfaitement valide, le simple fait d’y accéder constitue une execution du script PHP éventuellement contenu dans "page.php".

Ceci peut être problématique dans certains cas (en particulier dans mon cas pour les url absolues et relatives, étant donnée que "autre_chose" est alors considéré à un niveau de profondeur supplémentaire dans l’arborescence des fichiers par rapport à "page.php")

Marre de votre webmail ? Remplacez le par Rainloop ! - Korben

#14878

D’après les commentaires, ça serait un client IMAP en PHP qui ne garde rien en cache.

Quoi qu’il en soit, il a l’air sympa, surtout au niveau du design, mais pas vraiment au niveau de l’interface, qui refait certaines des mêmes erreur que GMail et Google+ (plus de 3 clics pour faire une action basique, c’est perdre son temps).

http://korben.info/marre-de-votre-webmail-remplacez-le-par-rainloop.html