Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Помогите написать


Автор: DriveSoftware 6.5.2004, 20:22
Помогите сделать простенький скрипт на PHP или Perl...

Скрипту нада передать два параметра (из строки браузера), первый это имя файла, который нада создать на серваке, а второй параметр то что нада записать в этот файл...

Автор: Sardar 6.5.2004, 20:56
Классную брешь делаешь biggrin.gif
Код
<?php
if(isset($_GET['filename'])&&isset($_GET['data'])) {
//проверь что в имени файла ты не перезаписываешь скрипты и не лезешь куда не надо...;)
$fp=@fopen($_GET['filename'],"w") or die("Однако у нас проблемы, попробуйте попозже"); //еще хорошо бы записать в лог
fwrite($fp,$_GET['data']);
fclose($fp);
//теперь взгляни на этот запрос, где index.php это главная страница сайта
//bug.php?filename=index.php&data=poluchi%20problemu
?>
<h3>Все прошло успешно</h3>
<?php
} else{
echo "Однако... что то я не понял запроса...";
}
?>

Автор: DriveSoftware 6.5.2004, 21:11
Sardar

Огромное спасибо!

а реально ли обойтися так?

echo $file_name >myfile

или это что то не то :/

Автор: Sardar 6.5.2004, 21:52
Цитата
echo $file_name >myfile

Нет, результатом будет булевское значение выражения: переменная $file_name больше чем константа myfile. Это не Perl...

DriveSoftware опиши получше задачу, иначе ничего полезного не получится. Предидущий код делает точно то что ты сказал, но круче дырки нельзя придумать. Представь что я создаю у тебя на серваке php файл и записываю туда свой злобный код.


Автор: IZ@TOP 6.5.2004, 22:10
Когда все сделаешь как показал Sardar в первом примере, не забудь адресок скинуть где это будет работать biggrin.gif Я тоже злобный кодик подкину wink.gif

Автор: DriveSoftware 6.5.2004, 22:25
Sardar

Вобщем о безопасности в моем случае речь не идет,
адресок пока не дам, потому что пока сам не знаю где это будет.

почему то у меня ничего не вышло:

test.php
Код

<?php
if(isset($_GET['filename'])&&isset($_GET['data']))
{

$fp=@fopen($_GET['filename'],"w") or die("Error");
fwrite($fp,$_GET['data']);
fclose($fp);

}
?>


делаю такой запрос:

http://www.host.com/my/test.php?filename=testfile&data=poluchi%20problemu

вылазит страничка с надписью Error

что не так :/

Автор: IZ@TOP 6.5.2004, 22:33
Убери собачку перед fopen и напиши что скажет, если не чего не скажет, напиши в начале кода error_reporting(E_ALL);. Если тестишь на *никсе, или на винде с NTFS, проверь права на запись.

Автор: DriveSoftware 6.5.2004, 23:08
IZ@TOP

Ничего не помогло, Error и все тут..
а тестил у хостера, там *nix
права у скрипта выставил в 755


Автор: Sardar 6.5.2004, 23:17
Сообщение об ошибке выскакивает здесь:
Цитата
$fp=@fopen($_GET['filename'],"w") or die("Error");

fopen не может создать файл. Нет прав, другого быть не может...

Я в первый раз в жизни встречаюсь с подобной задачей... когда юзеру предоставляется возможность создать любой файл на сервере с любым содержимым...

Скажи конкретно что нужно получить, придумаем правильное решение.

Автор: IZ@TOP 7.5.2004, 00:09
Кореектно делать так:
Цитата
1) Выставяем права на каталог в который нужно писать файлы 0777.
Потом следует такой сценарий:
$f = fopen($_GET['file'], "w");
fclose($f);
chmod($_GET['file'], 0666);
$f = fopen($_GET['file'], "a+");
fputs($f, $_GET['data']);
fclose($f);

Вот собственно и все. Так должно работать.

Автор: DriveSoftware 9.5.2004, 16:28
IZ@TOP

спасибо... заработало...

Автор: Sardar 9.5.2004, 17:20
DriveSoftware никому не рассказывай о этом скрипте, как только народ узнает, те кто поумней поюзают твой сервер(как прокси например), другие просто уничтожат его. Если админ у хостера тупой, то с тебя поимеют всех на вашем хостинге.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)