Сценарий консоли PHP/передача аргументов по умолчанию/рефакторинг fopen() fread() fwrite() fclose()

Я написал этот крошечный скрипт, чтобы поменять местами цвета в теме Numix для Ubuntu Gnome:

<?php
$oldColor = $argv[1];
$newColor = $argv[2];
// defaults
// $oldColor = 'd64937';
// $newColor = 'f66153';

$path = '/usr/share/themes/Numix/gtk-3.0/gtk-dark.css';
$fileRead =  fopen($path, 'r');
$contents = fread($fileRead, filesize($path));
$newContents = str_replace($oldColor, $newColor, $contents);
$fileWrite =  fopen($path, 'w');
fwrite($fileWrite, $newContents);
fclose($fileWrite);
?>

Сценарий работает по назначению, пока я передаю два аргумента.

  1. Как установить значения по умолчанию для аргументов?
  2. Должен ли я реорганизовать, возможно, используя file_put_contents ()?

person RichardForrester    schedule 03.01.2015    source источник
comment
Вы можете проверить с помощью empty(), установлено ли значение, а если не установлено значение по умолчанию, также file_get_contents() и file_put_contents() не плохой способ, так что попробуйте! Попробуйте решить это сами, если вы застряли, скажите это.   -  person Rizier123    schedule 03.01.2015
comment
Пожалуйста, объясните свой второй вопрос. Почему это вариант?   -  person honk    schedule 03.01.2015
comment
@ Rizier123 Спасибо, сработало.   -  person RichardForrester    schedule 03.01.2015
comment
@pandiatonicism Хорошо! Если вы хотите, вы можете написать свой ответ здесь и поделиться тем, что вы придумали!   -  person Rizier123    schedule 03.01.2015
comment
@Rizier123 Rizier123 Я пытался вставить это, но в комментариях это выглядит странно, и я не знал, должен ли я ответить на свой вопрос ... кажется немного забавным.   -  person RichardForrester    schedule 03.01.2015
comment
@pandiatonicism Прочитайте это: stackoverflow.com/help/self-answer И вы увидите, что все в порядке! (Также возьмите посмотрите здесь: stackoverflow.com/tour Вы даже можете принять свой собственный ответ, но я бы принял ответ, который помог вам больше всего и решил проблему проблема)   -  person Rizier123    schedule 03.01.2015
comment
@honk Теперь, когда я провел небольшой рефакторинг, кажется очевидным, что file_get_contents() и file_put_contents() - это то, что нужно. Как указано в документации PHP для file_put_contents(): эта функция идентична последовательному вызову fopen(), fwrite() и fclose() для записи данных в файл.   -  person RichardForrester    schedule 03.01.2015
comment
@DelicateMonster: я рад, что вы смогли решить свою проблему. Я спросил вас об этом в своем комментарии, потому что ваш второй вопрос выглядит идеально, чтобы его можно было задать своей резиновой уточке ;)   -  person honk    schedule 03.01.2015


Ответы (2)


Я собираюсь изучить ответ Лоза Чероне, который для меня немного продвинут (это мой первый сценарий), но я придумал кое-что получше:

<?php
if (empty($argv[1])) {
    $oldColor = 'd64937';
    $newColor = 'f66153';
} elseif (empty($argv[2])) {
    echo "Please supply new color";
    return false;
} else {
    $oldColor = $argv[1];
    $newColor = $argv[2];
}
$path = '/usr/share/themes/Numix/gtk-3.0/gtk-dark.css';
$oldContents = file_get_contents($path);
$newContents = str_replace($oldColor, $newColor, $oldContents);
file_put_contents($path, $newContents);
?>
person RichardForrester    schedule 03.01.2015

Кажется справедливым поделиться конечным продуктом с теми, кто использует тему Numix в Ubuntu. Просто скопируйте скрипт в файл .php и запустите как sudo. Сначала сделайте резервную копию двух файлов.

<?php 

if (!empty($argv[1]) && empty($argv[2])) {
    echo "Please supply two colors for your very own custom color swap or zero colors for a slight improvement";
    return false;
}

$oldColor = !empty($argv[1]) ? $argv[1] : 'd64937';
$newColor = !empty($argv[2]) ? $argv[2] : 'f66153';
$file_1 = '/usr/share/themes/Numix/gtk-3.0/gtk-dark.css';
$file_2 = '/usr/share/themes/Numix/gtk-2.0/gtkrc';

file_put_contents(
    $file_1, 
    str_replace(
        $oldColor, 
        $newColor, 
        file_get_contents($file_1)
    )
);

file_put_contents(
    $file_2, 
    str_replace(
        $oldColor, 
        $newColor, 
        file_get_contents($file_2)
    )
);
?>
person RichardForrester    schedule 03.01.2015