.
last
Welcome to my SnippetVamp space !
Afficher toutes les erreurs en PHP directement dans le navigateur
error_reporting(E_ALL);
ini_set('display_errors', 'On');
PHP
<iframe width="100%" height="218" src="http://snip.yosko.net/index.php?embed=5eda68b24f098" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 05/06/2020
Copier dans le presse papier sans flash
// Utilisation
$('#monBouton').copy("IdleBlog is op!!");
// Fonction
$.fn.extend({
copy : function (text) {
return $(this).click(function () {
var container = $('<span style="position:absolute;top:-1000px;">' + text + '</span>');
$('body').append(container);
var range = document.createRange();
var selection = window.getSelection();
selection.removeAllRanges();
range.selectNodeContents(container.get(0));
selection.addRange(range);
document.execCommand('copy');
selection.removeAllRanges();
container.remove();
});
}
});
Javascript
http://blog.idleman.fr/snippet-27-javascript-copier-dans-le-presse-papier-sans-flash-et-fonctionne-sur-ie/
<iframe width="100%" height="542" src="http://snip.yosko.net/index.php?embed=5807358eab602" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 19/10/2016
Base64 image in HTML/PHP
<?php
// GD method
ob_start ();
$img = imagecreatefrompng('source.png');
imagepng($img);
$img_data = ob_get_contents ();
ob_end_clean ();
// file method
$img_data = file_gets_contents('source.png');
// encode data in base64
$img_data_base64 = base64_encode ($img_data);
?>
<img src="data:image/png;base64,<?php echo $img_data_base64; ?>" alt="">
HTML PHP
<iframe width="100%" height="506" src="http://snip.yosko.net/index.php?embed=564065d96ea1d" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 09/11/2015
Attendre la fin de la frappe au clavier avant d'effectuer une action
//delay function
var delay = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
//usage (vanilla JavaScript)
var inputs = document.querySelectorAll('input');
for (var i = 0; i < inputs.length; i++) {
var input = inputs[i];
input.addEventListener('keyup', function(e) {
delay(function(){
console.log('Time elapsed!');
}, 1000 );
});
}
//usage (jQuery)
$('input').keyup(function() {
delay(function(){
console.log('Time elapsed!');
}, 1000 );
});
Javascript
http://stackoverflow.com/questions/1909441/jquery-keyup-delay
<iframe width="100%" height="668" src="http://snip.yosko.net/index.php?embed=5551b404949f0" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 12/05/2015
Intégrez une "base de données" dans votre fichier unique d’exécution
<?php
//On ouvre la base de donnée sous forme de tableau
$db = db();
//on ajoute quelques données et on affiche la base
@$db['entries'][] = 'hello world '.count(@$db['entries']);
var_dump($db);
//on enregistre la base
db($db);
//A partir d'ici, ne touchez à rien ou tout explose.
//Base de donnée json compressée
$database = '';
//fonction de gestion de base de donnée intégrée
function db($d=false){
$s = file_get_contents(__FILE__);
if(!$d){
preg_match_all('/\$database = \'(.*?)\';/s', $s, $result, PREG_PATTERN_ORDER);
return $result[1][0]==''?array():json_decode(gzinflate($result[1][0]),true);
}else{
file_put_contents(__FILE__,preg_replace('/\$database = \'(.*?)\';/s', '$database = \''.gzdeflate(json_encode($d)).'\';', $s));
}
}
?>
PHP
http://blog.idleman.fr/snippet-25-php-integrez-une-base-de-donnee-dans-votre-fichier-unique-dexecution/
<iframe width="100%" height="632" src="http://snip.yosko.net/index.php?embed=538ebf4d50728" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 04/06/2014
Dom2Array + Array2Dom
<?php
/**
* Recursive function to turn a DOMDocument element to an array
* @param DOMDocument $root the document (might also be a DOMElement/DOMNode?)
*/
function Dom2Array($root) {
$array = array();
if($root->hasAttributes()) {
foreach($root->attributes as $attribute) {
$array['_attributes'][$attribute->name] = $attribute->value;
}
}
if($root->hasChildNodes()) {
$children = $root->childNodes;
if($children->length == 1
&& ($children->item(0)->nodeType == XML_TEXT_NODE
|| $children->item(0)->nodeType == XML_CDATA_SECTION_NODE)
) {
$array['_value'] = $children->item(0)->nodeValue;
} else {
for($i = 0; $i < $children->length; $i++) {
if($children->item($i)->nodeType == XML_ELEMENT_NODE) {
$child = $children->item($i);
$array['_children'][$child->nodeName] = Dom2Array($child);
}
}
}
}
return $array;
}
/**
* Recursive function to turn an array to a DOMDocument
* @param array $array the array
* @param string $name only used by recursion
* @param DOMDocument $doc only used by recursion
*/
function Array2Dom($array, $name = '', $doc = null) {
//current node
if($doc == null) {
$doc = new DOMDocument();
$doc->formatOutput = true;
$currentNode = $doc;
} else {
$currentNode = $doc->createElement($name);
}
//children/attributes/values of current node
foreach($array as $key => $value) {
if($key == '_value') {
$currentNode->nodeValue = $value;
} elseif($key == '_attributes') {
foreach($value as $name => $attribute) {
$currentNode->setAttribute($name, $attribute);
}
} elseif($key == '_children') {
foreach($value as $name => $child) {
$childNode = Array2Dom($child, $name, $doc);
$childNode = $currentNode->appendChild($childNode);
}
}
}
return $currentNode;
}
?>
PHP XML
https://gist.github.com/yosko/6991691
<iframe width="100%" height="1424" src="http://snip.yosko.net/index.php?embed=525d460027f5b" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 12/05/2015
search2feed : transformer une recherche en flux
<?php
# search2feed
# @author: bronco@warriordudimanche.net / warriordudimanche.net
# @version 0.1
# @license free and opensource
# @use: search2feed.php?q=your+query+here
function Random_referer(){
return array_rand(array(
'http://oudanstoncul.com.free.fr/',
'http://googlearretedenousfliquer.fr/',
'http://stopspyingme.fr/',
'http://spyyourassfuckinggoogle.fr/',
'http://dontfuckinglookatme.fr/',
'http://matemonculgoogle.fr/',
'http://auxarmescitoyens.fr/',
'http://jetlametsavecdugravier.con/',
'http://lesdeuxpiedsdanstagueule.fr/',
'http://moncoudedanstabouche.con/',
'http://monpieddanston.uk/',
'http://bienfaitpourvosgueul.es/',
'http://pandanstesdents.fr/',
'http://tupuessouslesbras.fr/',
'http://mangetescrottesdenez.fr/',
'http://jtepourristesstats.fr/',
'http://ontecompissevigoureusement.com/',
'http://lepoingleveetlemajeuraussi.com/',
));
}
function return_UTF8($var){
$utf8=str_replace("xefxbbxbfxA0", '',utf8_encode($var));// SANS BOM !!!!
if (strpos($var,"xA0")){return $utf8;}
if (strpos($utf8,'Ã')){return $var;}else {return $utf8;}
}
function file_curl_contents($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Charset: UTF-8'));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
if (!ini_get("safe_mode") && !ini_get('open_basedir') ) {curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);}
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_REFERER, random_referer());// notez le referer "custom"
$data = curl_exec($ch);
$response_headers = curl_getinfo($ch);
// Google seems to be sending ISO encoded page + htmlentities, why??
if($response_headers['content_type'] == 'text/html; charset=ISO-8859-1') $data = html_entity_decode(iconv('ISO-8859-1', 'UTF-8//TRANSLIT', $data));
# $data = curl_exec($ch);
curl_close($ch);
return return_utf8($data);
}
function parse_query($query,$title='Search2feed',$nb, $link='http://warriordudimanche.net',$lang='fr',$safesearch='&safe=off'){
$REGEX_WEB='#(?<=<h3 class="r"><a href="/url?q=)([^&]+).*?>(.*?)</a>.*?(?<=<span class="st">)(.*?)(?=</span>)#';
$REGEX_PAGES='#&start=([0-9]+)|&start=([0-9]+)#';
$lang=strip_tags($lang);
$URL='https://www.google.com/search?hl='.$lang.$safesearch.'&id=hp&q=';
$page=file_curl_contents($URL.str_replace(' ','+',urlencode($query)).'&num='.$nb);
if (!$page){return false;}
preg_match_all($REGEX_WEB, $page, $r);
preg_match_all($REGEX_PAGES,$page,$p);
$p=count($p[2]);
$content=array();
foreach ($r[1] as $key=>$val){
$content[$key]['description']=strip_tags($r[3][$key]);
$content[$key]['link']=strip_tags($r[1][$key]);
$content[$key]['title']=strip_tags($r[2][$key]);
$content[$key]['guid']=strip_tags($r[1][$key]).'#1';
$content[$key]['pubDate']=@date('r');
}
$rss=array(
'infos'=>array(
'type'=>'rss',
'description'=>strip_tags($query),
'title'=>$title,
'link'=>$link,
),
'items'=>$content
);
return $rss;
}
function array2feed($array=null){
if (!$array){return false;}
if (empty($array['infos']['type'])){$array['infos']['type']='rss';}else{$array['infos']['type']=strtolower($array['infos']['type']);}
if (empty($array['infos']['description'])){$array['infos']['description']='';}
$r="n";$t="t";
$tpl=array('rss'=>array(),'atom'=>array());
$tpl['rss']['header']='<?xml version="1.0" encoding="utf-8" ?>'.$r.'<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">'.$r.$t.'<channel>'.$r;
$tpl['atom']['header']='<feed xmlns="http://www.w3.org/2005/Atom">'.$r;
$tpl['rss']['footer']=$t.'</channel></rss>'.$r;
$tpl['atom']['footer']='</feed>'.$r;
$tpl['rss']['content-type']='Content-Type: application/rss+xml';
$tpl['atom']['content-type']='Content-Type: application/atom+xml;charset=utf-8';
header($tpl[$array['infos']['type']]['content-type']);
$feed=$tpl[$array['infos']['type']]['header'];
//create the feed's info content
foreach($array['infos'] as $key=>$value){
if ($array['infos']['type']=='atom'){ // ATOM
if ($key=='link'){$feed.=$t.$t.'<link href="'.$value.'" rel="self" type="application/atom+xml"/>'.$r;}
elseif ($key=='author'){$feed.=$t.$t.'<author><name>'.$value.'</name></author>'.$r;}
elseif ($key=='licence'){$feed.=$t.$t.'<'.$key.' href="'.$value.'" rel="license"/>'.$r;} // in atom feed, licence is the link to the licence type
elseif ($key!='version'&&$key!='type'){$feed.=$t.$t.'<'.$key.'>'.$value.'</'.$key.'>'.$r;}
}else{ // RSS
if ($key!='version'&&$key!='type'){$feed.=$t.$t.'<'.$key.'>'.$value.'</'.$key.'>'.$r;}
}
}
//then the items content
foreach ($array['items'] as $item){
if ($array['infos']['type']=='atom'){ $feed.=$t.$t.$t.'<entry>'.$r;}else{$feed.=$t.$t.$t.'<item>'.$r;}
foreach($item as $key=>$value){
if ($array['infos']['type']=='atom'){ // ATOM
if ($key=='link'){$feed.=$t.$t.$t.$t.'<link href="'.$value.'" rel="alternate" type="text/html"/>'.$r;}
elseif ($key=='content'){$feed.=$t.$t.$t.$t.'<content type="text">'.htmlspecialchars($value).'</content>'.$r;}
else{$feed.=$t.$t.$t.$t.'<'.$key.'>'.$value.'</'.$key.'>'.$r;}
}else{ // RSS
if ($key=='date'||$key=='pubDate'||$key=='title'||$key=='link'){$feed.=$t.$t.$t.$t.'<'.$key.'>'.htmlspecialchars($value).'</'.$key.'>'.$r;}
elseif($key=='guid'){ $feed.=$t.$t.$t.$t.'<guid isPermaLink="false">'.$value.'</guid>'.$r;}
else{$feed.=$t.$t.$t.$t.'<'.$key.'><![CDATA['.$value.']]></'.$key.'>'.$r;}
}
}
if ($array['infos']['type']=='atom'){ $feed.=$t.$t.$t.'</entry>'.$r;}else{$feed.=$t.$t.$t.'</item>'.$r;}
}
$feed.=$tpl[$array['infos']['type']]['footer'];
return $feed;
}
// récupération des parametres get
if (isset($_GET['q'])){$query=strip_tags($_GET['q']);}else{exit('pas de query');}
if (isset($_GET['title'])){$title=strip_tags($_GET['title']);}else{$title='GoogolSearch for '.$query;}
if (isset($_GET['nb'])){$nb=strip_tags($_GET['nb']);}else{$nb=20;}
echo array2feed(parse_query($query,$title,$nb));
?>
PHP
http://www.warriordudimanche.net/article193/search2feed-transformer-une-recherche-en-flux
<iframe width="100%" height="3044" src="http://snip.yosko.net/index.php?embed=52550a9ce8577" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 09/10/2013
Trouver jours fériés (fixes et mouvants)
?php
/**
* Cette fonction retourne un tableau de timestamp correspondant
* aux jours fériés en France pour une année donnée.
*/
function isNotWorkable($date)
{
if ($date === null)
{
$date = time();
}
$date = strtotime(date('m/d/Y',$date));
$year = date('Y',$date);
$easterDate = easter_date($year);
$easterDay = date('j', $easterDate);
$easterMonth = date('n', $easterDate);
$easterYear = date('Y', $easterDate);
$holidays = array(
// Dates fixes
mktime(0, 0, 0, 1, 1, $year), // 1er janvier
mktime(0, 0, 0, 5, 1, $year), // Fête du travail
mktime(0, 0, 0, 5, 8, $year), // Victoire des alliés
mktime(0, 0, 0, 7, 14, $year), // Fête nationale
mktime(0, 0, 0, 8, 15, $year), // Assomption
mktime(0, 0, 0, 11, 1, $year), // Toussaint
mktime(0, 0, 0, 11, 11, $year), // Armistice
mktime(0, 0, 0, 12, 25, $year), // Noel
// Dates variables
mktime(0, 0, 0, $easterMonth, $easterDay + 1, $easterYear),
mktime(0, 0, 0, $easterMonth, $easterDay + 39, $easterYear),
mktime(0, 0, 0, $easterMonth, $easterDay + 50, $easterYear),
);
return in_array($date, $holidays);
}
?>
PHP
http://blog.idleman.fr/snippet-23-php-trouver-les-jours-feries-fixes-et-mouvants/#comment-31709
<iframe width="100%" height="938" src="http://snip.yosko.net/index.php?embed=5236b38a00a72" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 16/09/2013
Array2feed: produire un flux valide à partir d'un tableau
# Array2feed
# @author: bronco@warriordudimanche.net
# @version 0.1
# @license free and opensource
# @inspired by http://milletmaxime.net/syndexport/
# @use: $items=feed2array('http://sebsauvage.net/links/index.php?do=rss');
# @doc:
# the array must have an index 'infos' and another called 'items'
#info key
# for rss type feed, infos must have at least the 'title', 'description', 'guid' keys
# for atom type feed, infos must have at least the 'title', 'id', 'subtitle', 'link' keys
# items key => array
# for rss type feed, each item must have the 'title', 'description', 'pubDate' and 'link' keys
# for atom type feed, info must have the 'title', 'id', 'updated, 'link' & 'content' keys
function array2feed($array=null){
if (!$array){return false;}
if (empty($array['infos']['type'])){$array['infos']['type']='rss';}else{$array['infos']['type']=strtolower($array['infos']['type']);}
if (empty($array['infos']['description'])){$array['infos']['description']='';}
$r="n";$t="t";
$tpl=array('rss'=>array(),'atom'=>array());
$tpl['rss']['header']='<?xml version="1.0" encoding="utf-8" ?>'.$r.'<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">'.$r.$t.'<channel>'.$r;
$tpl['atom']['header']='<feed xmlns="http://www.w3.org/2005/Atom">'.$r;
$tpl['rss']['footer']=$t.'</channel></rss>'.$r;
$tpl['atom']['footer']='</feed>'.$r;
$tpl['rss']['content-type']='Content-Type: application/rss+xml';
$tpl['atom']['content-type']='Content-Type: application/atom+xml;charset=utf-8';
header($tpl[$array['infos']['type']]['content-type']);
$feed=$tpl[$array['infos']['type']]['header'];
//create the feed's info content
foreach($array['infos'] as $key=>$value){
if ($array['infos']['type']=='atom'){ // ATOM
if ($key=='link'){$feed.=$t.$t.'<link href="'.$value.'" rel="self" type="application/atom+xml"/>'.$r;}
elseif ($key=='author'){$feed.=$t.$t.'<author><name>'.$value.'</name></author>'.$r;}
elseif ($key=='licence'){$feed.=$t.$t.'<'.$key.' href="'.$value.'" rel="license"/>'.$r;} // in atom feed, licence is the link to the licence type
elseif ($key!='version'&&$key!='type'){$feed.=$t.$t.'<'.$key.'>'.$value.'</'.$key.'>'.$r;}
}else{ // RSS
if ($key!='version'&&$key!='type'){$feed.=$t.$t.'<'.$key.'>'.$value.'</'.$key.'>'.$r;}
}
}
//then the items content
foreach ($array['items'] as $item){
if ($array['infos']['type']=='atom'){ $feed.=$t.$t.$t.'<entry>'.$r;}else{$feed.=$t.$t.$t.'<item>'.$r;}
foreach($item as $key=>$value){
if ($array['infos']['type']=='atom'){ // ATOM
if ($key=='link'){$feed.=$t.$t.$t.$t.'<link href="'.$value.'" rel="alternate" type="text/html"/>'.$r;}
elseif ($key=='content'){$feed.=$t.$t.$t.$t.'<content type="text">'.htmlspecialchars($value).'</content>'.$r;}
else{$feed.=$t.$t.$t.$t.'<'.$key.'>'.$value.'</'.$key.'>'.$r;}
}else{ // RSS
if ($key=='date'||$key=='pubDate'||$key=='title'||$key=='link'){$feed.=$t.$t.$t.$t.'<'.$key.'>'.htmlspecialchars($value).'</'.$key.'>'.$r;}
elseif($key=='guid'){ $feed.=$t.$t.$t.$t.'<guid isPermaLink="false">'.$value.'</guid>'.$r;}
else{$feed.=$t.$t.$t.$t.'<'.$key.'><![CDATA['.$value.']]></'.$key.'>'.$r;}
}
}
if ($array['infos']['type']=='atom'){ $feed.=$t.$t.$t.'</entry>'.$r;}else{$feed.=$t.$t.$t.'</item>'.$r;}
}
$feed.=$tpl[$array['infos']['type']]['footer'];
return $feed;
}
$array=array(
'infos'=>array(
'type'=>'rss',
'description'=>'Ceci est le test ultime de la mort',
'title'=>'test de création de flux rss',
'link'=>'http://www.warriordudimanche.net',
),
'items'=>array(
0=>array(
'description'=>'Ceci est le premier item du flux',
'title'=>'item 1 : le titre',
'link'=>'http://www.warriordudimanche.net',
'guid'=>'http://www.warriordudimanche.net#1',
'pubDate'=>@date('r'),// Be carefull, the rss pubDate format is specific ! RFC 2822 (see http://www.faqs.org/rfcs/rfc2822.html)
),
1=>array(
'description'=>'Ceci est le second item du flux',
'title'=>'item 2 : le retour',
'link'=>'http://www.warriordudimanche.net',
'guid'=>'http://www.warriordudimanche.net#2',
'pubDate'=>@date('r'),
),
2=>array(
'description'=>'Ceci est le troisième item du flux',
'title'=>'item 3 : la revanche',
'link'=>'http://www.warriordudimanche.net',
'guid'=>'http://www.warriordudimanche.net#3',
'pubDate'=>@date('r'),
),
)
);
echo array2feed($array);
PHP
http://www.warriordudimanche.net/article179/array2feed-produire-un-flux-valide-a-partir-d-un-tableau
<iframe width="100%" height="2018" src="http://snip.yosko.net/index.php?embed=5204f5bf0876f" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 09/08/2013
Font stacks
/* Standard font-stacks from http://css-tricks.com/snippets/css/font-stacks/ */
/* Times New Roman-based stack */
font-family: Cambria, "Hoefler Text", Utopia, "Liberation Serif", "Nimbus Roman No9 L Regular", Times, "Times New Roman", serif;
/* Modern Georgia-based serif stack */
font-family: Constantia, "Lucida Bright", Lucidabright, "Lucida Serif", Lucida, "DejaVu Serif", "Bitstream Vera Serif", "Liberation Serif", Georgia, serif;
/* Traditional Garamond-based serif stack */
font-family: "Palatino Linotype", Palatino, Palladio, "URW Palladio L", "Book Antiqua", Baskerville, "Bookman Old Style", "Bitstream Charter", "Nimbus Roman No9 L", Garamond, "Apple Garamond", "ITC Garamond Narrow", "New Century Schoolbook", "Century Schoolbook", "Century Schoolbook L", Georgia, serif;
/* Helvetica/Arial-based sans serif stack */
font-family: Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif;
/* Verdana-based sans serif stack */
font-family: Corbel, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", "DejaVu Sans", "Bitstream Vera Sans", "Liberation Sans", Verdana, "Verdana Ref", sans-serif;
/* Trebuchet-based sans serif stack */
font-family: "Segoe UI", Candara, "Bitstream Vera Sans", "DejaVu Sans", "Bitstream Vera Sans", "Trebuchet MS", Verdana, "Verdana Ref", sans-serif;
/* Impact-based sans serif stack */
font-family: Impact, Haettenschweiler, "Franklin Gothic Bold", Charcoal, "Helvetica Inserat", "Bitstream Vera Sans Bold", "Arial Black", sans-serif;
/* Monospace stack */
font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace;
CSS
http://sebsauvage.net/paste/?7d4413d0c2c733b9#kkprONO4FtFkZUe2skvpnSHb/coMdCYjO762xypzJmg
<iframe width="100%" height="632" src="http://snip.yosko.net/index.php?embed=5204c7ecb2e01" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 09/08/2013
Color conversion
/*
Color lib by Yosko (http://www.yosko.net/)
Licence: WTFPL except for the following
source for HSL algorithm: http://www.easyrgb.com/index.php?X=MATH
*/
//returns a clean 6 digit hex number as a string
function cleanHexColor($hex) {
$hex = strtolower($hex);
//remove the leading "#"
if(strlen($hex) == 7 || strlen($hex) == 4)
$hex = substr($hex, -(strlen($hex)-1));
// $hex like "1a7"
if(preg_match('/^[a-f0-9]{6}$/i', $hex))
return $hex;
// $hex like "162a7b"
elseif(preg_match('/^[a-f0-9]{3}$/i', $hex))
return $hex[0].$hex[0].$hex[1].$hex[1].$hex[2].$hex[2];
//any other format
else
return "000000";
}
//returns an array of 3 [0-255] int
function hex2rgb($hex) {
return array(
hexdec(substr($hex, 0, 2)),
hexdec(substr($hex, 2, 2)),
hexdec(substr($hex, 4, 2)),
);
}
//returns a 6 digit hex number as a string
function rgb2hex($rgb) {
return ""
.substr("00".dechex(ceil($rgb[0])), -2)
.substr("00".dechex(ceil($rgb[1])), -2)
.substr("00".dechex(ceil($rgb[2])), -2)
;
}
//returns a 2 dimensional array of subarrays (HSL: 3 values [0-1] floats)
function variationAround($hsl, $stepSize = 0.2, $constant = "hue") {
if($constant == "hue") {
$i = 1; $j = 2;
} elseif($constant == "sat") {
$i = 0; $j = 2;
}if($constant == "lum") {
$i = 0; $j = 1;
}
$variations = array(); //resulting variations
$hslTemp = array(); //stores current variation
$mod = array(); //stores modulos for h, s & l
$mod[0] = (float)(($hsl[0]*100) % ($stepSize * 100)) / 100;
$mod[1] = (float)(($hsl[1]*100) % ($stepSize * 100)) / 100;
$mod[2] = (float)(($hsl[2]*100) % ($stepSize * 100)) / 100;
$hslTemp = $hsl;
$hslTemp[$i] = $mod[$i];
while($hslTemp[$i] <= 1) {
$row = array();
$hslTemp[$j] = $mod[$j];
while($hslTemp[$j] <= 1) {
$row[(string)$hslTemp[$j]] = array($hslTemp[0], $hslTemp[1], $hslTemp[2]);
$hslTemp[$j] = (float)($hslTemp[$j] + $stepSize);
}
$variations[(string)$hslTemp[$i]] = $row;
$hslTemp[$i] = (float)($hslTemp[$i] + $stepSize);
}
return $variations;
}
function rgb2hsl($rgb) {
//work with range [0-1] for RGB values
$r = $rgb[0] / 255;
$g = $rgb[1] / 255;
$b = $rgb[2] / 255;
//get min and max from RGB
$min = min($r, $g, $b);
$max = max($r, $g, $b);
$delta = $max-$min;
//luminance
$l = ($max + $min) / 2;
//saturation & hue
if($min == $max) {
//grayscale
$s = 0;
$h = 0;
} else {
//saturation
if($l < 0.5) $s = $delta/($max+$min);
else $s = $delta/(2-$max-$min);
//hue
if($r == $max) $h = ($g-$b)/(6*$delta);
elseif($g == $max) $h = 1/3 + ($b-$r)/(6*$delta);
elseif($b == $max) $h = 2/3 + ($r-$g)/(6*$delta);
//keep hue in the range [0,1]
if ($h < 0) $h++;
if ($h > 1) $h--;
}
return array($h, $s, $l);
}
function hsl2rgb($hsl) {
$h = $hsl[0];
$s = $hsl[1];
$l = $hsl[2];
//no saturation: grayscale
if($s == 0) {
$r = $g = $b = round($l * 255);
} else {
if($l < 0.5) $var2 = $l * (1 + $s);
else $var2 = ($l + $s) - ($s * $l);
$var1 = 2 * $l - $var2;
$r = 255 * hue2rgb($var1, $var2, $h + 1/3);
$g = 255 * hue2rgb($var1, $var2, $h);
$b = 255 * hue2rgb($var1, $var2, $h - 1/3);
}
return array($r, $g, $b);
}
function hue2rgb($v1, $v2, $vH)
{
if ( $vH < 0 ) $vH += 1;
if ( $vH > 1 ) $vH -= 1;
if ( $vH < 1/6 ) return $v1 + ( $v2 - $v1 ) * 6 * $vH;
elseif ( $vH < 1/2 ) return $v2;
elseif ( $vH < 2/3 ) return $v1 + ( $v2 - $v1 ) * ( 2/3 - $vH ) * 6;
else return ( $v1 );
}
PHP color
<iframe width="100%" height="2774" src="http://snip.yosko.net/index.php?embed=5200a8226193a" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 06/08/2013
Afficher toutes les erreurs
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors','On');
ini_set('log_errors', 'On');
ini_set('error_log', 'errors.log');
PHP
<iframe width="100%" height="254" src="http://snip.yosko.net/index.php?embed=5200a8057ab91" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 14/02/2014
Afficher flux image en base64
// A few settings
$image = 'cricci.jpg';
// Read image path, convert to base64 encoding
$imageData = base64_encode(file_get_contents($image));
// Format the image SRC: data:{mime};base64,{data};
$src = 'data: '.mime_content_type($image).';base64,'.$imageData;
// Echo out a sample image
echo '<img src="',$src,'">';
image PHP
<iframe width="100%" height="380" src="http://snip.yosko.net/index.php?embed=5200a7eac4b2a" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 06/08/2013
Récupérer adresse IP même derrière un proxy
/**
* get client IP from the best source possible (even through a server proxy)
* based on: http://stackoverflow.com/questions/1634782/what-is-the-most-accurate-way-to-retrieve-a-users-correct-ip-address-in-php
* @return string ip address (ipv4 or ipv6)
*/
public static function getIpAddress($local=false) {
foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){
if (array_key_exists($key, $_SERVER) === true){
foreach (explode(',', $_SERVER[$key]) as $ip){
$ip = trim($ip); // just to be safe
if ($local === true && filter_var($ip, FILTER_VALIDATE_IP) !== false
|| filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false
){
return $ip;
}
}
}
}
}
security PHP
http://stackoverflow.com/questions/1634782/what-is-the-most-accurate-way-to-retrieve-a-users-correct-ip-address-in-php
<iframe width="100%" height="524" src="http://snip.yosko.net/index.php?embed=5200a7c96c133" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 06/08/2013
Rotation de teinte d'un bitmap RGB
private void RotateColors(Bitmap image, float degrees)
{
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;
double r = degrees * System.Math.PI / 180; // degrees to radians
float cosR = (float)Math.Cos(r);
float sinR = (float)Math.Sin(r);
float a = (1 + 2 * cosR) / 3;
float b = ((1 - cosR) - (float)Math.Sqrt(3) * sinR) / 3;
float c = ((1 - cosR) + (float)Math.Sqrt(3) * sinR) / 3;
float[][] colorMatrixElements = {
new float[] {a, b, c, 0, 0},
new float[] {c, a, b, 0, 0},
new float[] {b, c, a, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {0, 0, 0, 0, 1}};
ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);
imageAttributes.SetColorMatrix(
colorMatrix,
ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);
using (Graphics g = Graphics.FromImage(image))
{
g.DrawImage(
image,
new Rectangle(0, 0, width, height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
GraphicsUnit.Pixel,
imageAttributes);
}
}
CSharp color
<iframe width="100%" height="866" src="http://snip.yosko.net/index.php?embed=5200a7a453a92" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 06/08/2013
Reset CSS
/* http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
CSS
http://meyerweb.com/eric/tools/css/reset/
<iframe width="100%" height="1046" src="http://snip.yosko.net/index.php?embed=5200a78c142f2" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 06/08/2013
HTML5 Page de base
<!doctype html>
<html lang="fr-FR">
<head>
<meta charset="UTF-8">
<title>Page HTML5</title>
<style></style>
<script></script>
<link rel="stylesheet" href="style.css">
<link href="icon.png" rel="icon" type="image/x-icon" />
<script type="text/javascript" src="script.js"></script></head>
</head>
<body>
</body>
</html>
HTML
<iframe width="100%" height="452" src="http://snip.yosko.net/index.php?embed=5200a650e75db" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 11/06/2021
Brute force protection system (sebsauvage)
<?php
date_default_timezone_set('Europe/Paris');
$GLOBALS['config']['DATADIR'] = 'data'; // Data subdirectory
$GLOBALS['config']['IPBANS_FILENAME'] = $GLOBALS['config']['DATADIR'].'/ipbans.php'; // File storage for failures and bans.
$GLOBALS['config']['BAN_AFTER'] = 5; // Ban IP after this many failures.
$GLOBALS['config']['BAN_DURATION'] = 1800; // Ban duration for IP address after login failures (in seconds) (1800 sec. = 30 minutes)
if (!is_dir($GLOBALS['config']['DATADIR'])) { mkdir($GLOBALS['config']['DATADIR'],0705); chmod($GLOBALS['config']['DATADIR'],0705); }
if (!is_file($GLOBALS['config']['DATADIR'].'/.htaccess')) { file_put_contents($GLOBALS['config']['DATADIR'].'/.htaccess',"Allow from nonenDeny from alln"); } // Protect data files.
function logm($message)
{
$t = strval(date('Y/m/d_H:i:s')).' - '.$_SERVER["REMOTE_ADDR"].' - '.strval($message)."n";
file_put_contents($GLOBALS['config']['DATADIR'].'/log.txt',$t,FILE_APPEND);
}
// ------------------------------------------------------------------------------------------
// Brute force protection system
// Several consecutive failed logins will ban the IP address for 30 minutes.
if (!is_file($GLOBALS['config']['IPBANS_FILENAME'])) file_put_contents($GLOBALS['config']['IPBANS_FILENAME'], "<?phpn$GLOBALS['IPBANS']=".var_export(array('FAILURES'=>array(),'BANS'=>array()),true).";n?>");
include $GLOBALS['config']['IPBANS_FILENAME'];
// Signal a failed login. Will ban the IP if too many failures:
function ban_loginFailed()
{
$ip=$_SERVER["REMOTE_ADDR"]; $gb=$GLOBALS['IPBANS'];
if (!isset($gb['FAILURES'][$ip])) $gb['FAILURES'][$ip]=0;
$gb['FAILURES'][$ip]++;
if ($gb['FAILURES'][$ip]>($GLOBALS['config']['BAN_AFTER']-1))
{
$gb['BANS'][$ip]=time()+$GLOBALS['config']['BAN_DURATION'];
logm('IP address banned from login');
}
$GLOBALS['IPBANS'] = $gb;
file_put_contents($GLOBALS['config']['IPBANS_FILENAME'], "<?phpn$GLOBALS['IPBANS']=".var_export($gb,true).";n?>");
}
// Signals a successful login. Resets failed login counter.
function ban_loginOk()
{
$ip=$_SERVER["REMOTE_ADDR"]; $gb=$GLOBALS['IPBANS'];
unset($gb['FAILURES'][$ip]); unset($gb['BANS'][$ip]);
$GLOBALS['IPBANS'] = $gb;
file_put_contents($GLOBALS['config']['IPBANS_FILENAME'], "<?phpn$GLOBALS['IPBANS']=".var_export($gb,true).";n?>");
logm('Login ok.');
}
// Checks if the user CAN login. If 'true', the user can try to login.
function ban_canLogin()
{
$ip=$_SERVER["REMOTE_ADDR"]; $gb=$GLOBALS['IPBANS'];
if (isset($gb['BANS'][$ip]))
{
// User is banned. Check if the ban has expired:
if ($gb['BANS'][$ip]<=time())
{ // Ban expired, user can try to login again.
logm('Ban lifted.');
unset($gb['FAILURES'][$ip]); unset($gb['BANS'][$ip]);
file_put_contents($GLOBALS['config']['IPBANS_FILENAME'], "<?phpn$GLOBALS['IPBANS']=".var_export($gb,true).";n?>");
return true; // Ban has expired, user can login.
}
return false; // User is banned.
}
return true; // User is not banned.
}
?>
PHP security
http://sebsauvage.net/links/?kO4Krg
<iframe width="100%" height="1388" src="http://snip.yosko.net/index.php?embed=5200a56022581" type="text/html"></iframe>
Text only - Permalink - Snippet public post date 06/08/2013