SAFE MODE и бесплатный хостинг

Stinger-I

Guest
SAFE MODE и бесплатный хостинг

Написал скрипт, который обрабатывает форму запроса. Дома стоит Apache и на нём скрипт отлично работает: выводит результат введённого товара и отсылает в папку-заклушку «!sendmail» письмо с результатом выбора. Короче, всё работает отлично. А когда выложил на fatal.ru при обработке результата заказа, выдаёт сообщение:

Warning: touch(): SAFE MODE Restriction in effect. The script whose uid is 58043 is not allowed to access / owned by uid 0 in /www/i/il/ila-25.webhost.ru/site/asean/zakaz.php on line 115
надо создать файл.

Код файла:
PHP:
<?php
$pusto = "
";
$start = "*START*
";
$end = "*END*

";
$e_mail = "E-mail: $address
";
$phone_order = "Контактный телефон: $phone
";
$date = "Дата заказа: ".date("H:i, jS F");
$fn = "/zakaz.txt";
$trans = array("calamar" => "Кальмар",
		"crab" => "Дальневосточный краб",
		"keta" => "Кета");
$total_goods = $calamar + $crab + $keta;
if ($total_goods == 0 || ( !eregi( "^([._a-z@0-9-]+[._a-z@0-9-]*)@(([a-z0-9-]+\.)*([a-z0-9-]+)(\.[a-z]{2,3})?)$", $address)))
print "<b>Не заполнено ни одно поле (неправильно введёно) или не введён (неправильно введён) e-mail.</b>";
else
{
echo "Ваш заказ был принят в ";
echo date("H:i, jS F");
echo "<br><br>";
echo "<b>Ваш e-mail:</b> ".$address;
echo "<br><b>Ваш контактный телефон:</b> ".$phone;
echo "<br><br>";
echo "<b>Ваш заказ:</b><br> ";

	touch ("$fn");
	if (file_exists("$fn"))
	{
	$fp = fopen("$fn","w") or die("Не могу открыть $fn");
	flock($fp, 2);
	fwrite($fp, $start);
	flock($fp, 3);
	fclose($fp);

foreach ($HTTP_POST_VARS as $key => $value)
	{
	if ($value>0)
	{
	foreach ($trans as $k => $v)
	if ($k == $key)
	print "$v"." - <b>$value</b><br>";
	}
	$fp = fopen("$fn","a") or die("Не могу открыть $fn");
	flock($fp, 2);
	fwrite($fp, $key);
	fwrite($fp, -$value);
	fwrite($fp, $pusto);
	flock($fp, 3);
	fclose($fp);
	}
	$fp = fopen("$fn","a") or die("Не могу открыть $fn");
	flock($fp, 2);
	fwrite($fp, $e_mail);
	fwrite($fp, $phone_order);
	fwrite($fp, $date);
	fwrite($fp, $pusto);
	fwrite($fp, $end);
	flock($fp, 3);
	fclose($fp);
$info = file_get_contents($fn);
if (mail( "[email protected]", "TEST!!", "$info"))
	echo "Письмо отправлено";
else
echo "Письмо не отправлено";
}
	else
	{
	print "надо создать файл.";
	}
}

?>
Строка 115: $fn = "/zakaz.txt";

Написал письмо в fatal.ru - ответ: зачем вам писать в / ?? это корень
А если убрать «/», то выдаётся два сообщения: типа «не могу создать файл» и «не могу открыть файл», одно относится к touch ("$fn"); , второе – к $fp = fopen("$fn","w") or die("Не могу открыть $fn");
В форуме почитал, рекомендовали писать именно через «/».
Может это из-за того что это бесплатный хостинг? Или проблема в другом? На платном хостинге работать будет?
 

SiMM

Новичок
Никто не даст тебе писать в корень, да и зачем это тебе? Пиши куда нибудь в /www/i/il/ila-25.webhost.ru/site/asean/
 

Stinger-I

Guest
Спасибо за "/www/i/il/ila-25.webhost.ru/site/asean/", ещё атрибут файла стоял неправильный. Теперь в браузере он выводит результат, а вот по почте я ничего не получаю, из-за чего это может быть?
 

Stinger-I

Guest
В mail вообще трудно что-то понять, а PHP FAQ мне не поможет, проблема другого рода.
Скрипт работает отменно, но с одним но: пишет результат, пишет «письмо отправлено», но на e-mail оно не приходит. Дома, на Apache, файл посылается на программу-заглушку, а в нете – нет. Атрибут на файл zakaz.txt – 666.

PHP:
$fn = "/www/i/il/ila-25.webhost.ru/site/asean/zakaz.txt";
$info = file_get_contents($fn);
if (mail( "[email protected]", "TEST!!", "$info"))
	echo "Письмо отправлено";
else
echo "Письмо не отправлено";
 

SiMM

Новичок
Stinger-I, вследующий раз - с этого и начинай - телепаты в отпуске. Ты в логи почтового сервера заглядывал? Можешь ещё попробовать Отправка почты средствами PHP: Альтернативные способы отправки писем.
А вообще, ИМХО, прежде чем лезть в форум было бы уместнее обратиться к хостеру.
 

Stinger-I

Guest
Где эти логи искать (поподробнее, если можно)?
На серваке у хостера три папки: site и cgi-bin - понятно, а вот mail - что туда класть, что писать не ясно. Ещё на серваке указан путь sendmail --> /usr/sbin/sendmail, что с ним делать, а?
 
Сверху