Séparateurs SVG programmables

Je publie aujourd’hui un helper PHP qui permet de dessiner des séparateurs en SVG très facilement avec quelques paramètres.

svg separators

 

PHP Script To Copy Files Recursively With Options

, ,

This script will help you copy files and folders from one location to another, recursively.
For each file or folder you can have copy options.

Here is an example conf file :

:: GitHub File ::
[/etc/php/cacert.pem] keep_existing = 1 [/etc/nginx/nginx.conf] keep_existing = 0 backup = 1 [/etc/nginx/sites-available/default] keep_existing = 0 backup = 1 [/etc/nginx] keep_existing = 1 [/home/default] keep_existing = 1

In this example, the file data/etc/nginx/sites-available/default will be copied to /etc/nginx/sites-available/default, and if the file already exists it will be backuped and overwritten.
In the same way, all the files inside data/etc/nginx will be copied to /etc/nginx, but existing file will be ignored.

How To

Place folders and files that you want to copy in data/
Edit filecopier-config.ini to configure which files and folders you want to copy, backup and overwrite

Command Lines :

php filecopier.php process_all [options]

This command will execute every entries in the filecopier-config.ini file

Config file options :

option values default description
keep_existing 1/0 0 keep file if already exists, do not overwrite it
backup 1/0 0 create a backup of the file if exists, then copy the new file
debug 1/0 0 write the copy in a test/ folder
php confeditor.php process filepath [options]

This command will copy the file located in data/filepath to filepath

Cmd options :

option equivalent values default
-ke keep_existing 1/0 0
-b backup 1/0 0
-d debug 1/0 0

PHP Script

:: GitHub File ::
<?php if(count($argv) >= 2 ) { if($argv[1] == 'process' && count($argv) >= 4 ) { process($argv[2], $argv[3]); } else if($argv[1] == 'process-all' ) { $config = parse_ini('confeditor-config.ini',false,false); //print_r($config); //exit(); foreach($config as $k=>$v) { $AddEdit = $k; $original = $v['original']; process($k, $original, $v); } } } function process( $editFileName, $originalFile, $config = null ) { global $argv; // gettings extra params $keepComments = getSetting( $config, $argv, 'keep_comments', '-kc', false, false); $keepEmptyLines = getSetting( $config, $argv, 'keep_empty_lines', '-kel', false, false); $sort = getSetting( $config, $argv, 'sort', '-sort', false, false); $debug = getSetting( $config, $argv, 'debug', '-d', false, false); $separator = getSetting( $config, $argv, 'separator', '-sep', true, '='); $commentRegex = getSetting( $config, $argv, 'comment_regex', '-cr', true, '-^(;|#)-'); $separator = str_replace('"', '', $separator); $commentRegex = str_replace('"', '',$commentRegex); //exit( '$keepComments '.$keepComments. ' $keepEmptyLines '.$keepEmptyLines. ' $sort '.$sort.' $separator '.$separator.' $commentRegex '.$commentRegex.' $debug '.$debug); $editFile = './data/'.$editFileName; if(!file_exists($editFile)) die( "editFile does not exist ".$editFile); if(!file_exists($originalFile)) die( "originalFile does not exist ".$originalFile); $to = $debug ? $originalFile.'-new.ini' : $originalFile; backup_file($originalFile); $ini = parse_ini($originalFile, $keepComments, $keepEmptyLines, $separator, $commentRegex ); $iniNewValues = parse_ini($editFile, false, false); $iniEdited = edit_ini($ini, $iniNewValues, $sort); save_ini($to, $iniEdited); //print_r($config); print_r($ini); print_r($iniNewValues); print_r($iniEdited); //$ini2 = parse_ini($file2, true); //print_r($ini2); } function getSetting( $config, $argv, $varName, $argName, $keepNextArg, $default) { if(!empty($config) && isset($config[$varName])) return $config[$varName]; if(!empty($argv) && !empty($argName) ) { if(in_array($argName, $argv) ) return $keepNextArg ? $argv[ array_search($argName, $argv) + 1 ] : true; } return $default; } function backup_file ($file) { //echo $file.'.bak'; if(!copy( $file, $file.'.bak')) //if(!file_put_contents( $file.'.bak', file_get_contents( $file))) exit("la création du backup a échoué"); } function edit_ini ( $ini, $iniNewValues, $sort = false ) { $ini = array_replace_recursive( $ini, $iniNewValues ); $globals = []; $sections = []; foreach( $ini as $k=>$v) { if(is_array($v)) //section $sections[$k] = $v; else $globals[$k] = $v; } if($sort) { ksort($globals); //print_r($globals); foreach($sections as $k => $v) { ksort($v); $sections[$k] = $v; //print_r($sections[$k]); } } return $globals + $sections; } function save_ini ( $filepath, $ini, $save = true ) { $str = ''; foreach( $ini as $k=>$v) { if(is_array($v)) //section { $str .= "[$k]".PHP_EOL; $str .= save_ini( '', $v, false); }else { if( preg_match('#^comment#', $k )) $str .= $v.PHP_EOL; else if( preg_match('#^empty#', $k )) $str .= PHP_EOL; else $str .= "$k = $v".PHP_EOL; } } if($save) file_put_contents($filepath, $str ); else return $str; } function parse_ini ( $filepath, $keepComments = true, $keepEmptyLines = true, $separator = '=', $commentRegex = '-^(;|#)-' ) { $ini = file( $filepath ); if ( count( $ini ) == 0 ) { return array(); } $sections = array(); $values = array(); $globals = array(); $result = array(); $i = 0; $j = 0; foreach( $ini as $line ){ $line = trim( $line ); // Sections if ( !empty($line) && $line{0} == '[' ) { $sections[] = substr( $line, 1, -1 ); $i++; continue; } // Key-value pair if ( $line == '' ) { if($keepEmptyLines) { $key = 'empty'.$j++; $value = $line; //echo $value; } else continue; }else if ( preg_match($commentRegex, $line) ) { if($keepComments ) { $key = 'comment'.$j++; $value = $line; //echo $value }else continue; }else if( preg_match( '#'.$separator.'#', $line)){ list( $key, $value ) = explode( $separator, $line, 2 ); } $key = trim( $key ); $value = trim( $value ); if ( $i == 0 ) { // Array values if ( substr( $line, -1, 2 ) == '[]' ) { $globals[ $key ][] = $value; } else { $globals[ $key ] = $value; } } else { // Array values if ( substr( $line, -1, 2 ) == '[]' ) { $values[ $i - 1 ][ $key ][] = $value; } else { $values[ $i - 1 ][ $key ] = $value; } } } for( $j=0; $j<$i; $j++ ) { $result[ $sections[ $j ] ] = $values[ $j ]; } return $globals + $result; } ?>

The full repository is here : https://github.com/anthonykozak/iniTools

PHP Mobile icons & splashcreens generator

When you publish a game to the Google play store, the AppStore and so on, you face the boring wall of icons, splashcreens and screenshots sizes. You need to generate a lots of differents images for each platform you target and that can be a huge waste of time.
I didn’t found any service letting you generate the exact sizes you need, so I made my own.

Here is MobileIconGenerator hosted service.

And here is the source code on GitHub.

thumb