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.
Je publie aujourd’hui un helper PHP qui permet de dessiner des séparateurs en SVG très facilement avec quelques paramètres.
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.
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
php filecopier.php process_all [options]
This command will execute every entries in the filecopier-config.ini file
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
option | equivalent | values | default |
---|---|---|---|
-ke | keep_existing | 1/0 | 0 |
-b | backup | 1/0 | 0 |
-d | debug | 1/0 | 0 |
:: 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
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.