Выполнение Php как Cgi
При этом скрипту надо писать и читать конфиденциальную информацию. Т.е. установка прав на каталог 700 - не дает читать/писать в ней.
А дать права для nobody - то же, что отдать файлы всем пользователям сервера... :(
Чтобы не переписывать проект на перл, решил запускать PHP как CGI. При этом права нормальные, из 700 читает и пишет.
НО! Почему то не передаются параметры ни через GET ни через POST...
Вот простенький пример:
----- Начало script.cgi -----
#!/usr/local/bin/php
<html>
<body>
<?
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
echo "<h1>Привет, " . $_POST['name'] . "</h1>";
}
?>
<form method="POST">
Имя: <input type="text" name="name">
<input type="submit" name="okbutton" value="OK">
</form>
</body>
</html>
----- Конец script.cgi -----
Так, вот, под виндой (Денвер) все работает. На двух хостингах разных - работает как cgi с правильными правами, но не получает переданные данные!!!
Файл лежит в документ_рут пробовал ложить в цги-бин - ничего не меняется...
HELP!
Как?
$_GET = parse_str($_SERVER['QUERY_STRING']);
POST читаем из stdin.
Вот так все заработало:
#!/usr/local/bin/php
<html>
<body>
<?
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$stdin = fopen("php://stdin", "r");
$Post=fgets($stdin,5000);
fclose($stdin);
$_POST = parse_str($Post);
}
if ($_SERVER['REQUEST_METHOD'] == 'GET')
{
$_GET = parse_str($_SERVER['QUERY_STRING']);
}
if ($name) echo "<h1>Привет, ".$name." ".$surname."</h1>";
?>
<form method="POST">
Введите Ваше имя: <input type="text" name="name">
Введите Вашу фамилию: <input type="text" name="surname">
<input type="submit" name="okbutton" value="OK">
</form>
</body>
</html>
if ($_SERVER['REQUEST_METHOD'] == 'POST')
if ($_SERVER['REQUEST_METHOD'] == 'GET')
ифы лучше убрать. Тебе может захотется сделать
<form action='script.php?var=val' method=post>
и тогда ты потеряешь var
И ужаснулся! Оказывается, ИЕ пофиг заголовок, выдающийся страницей, он ее нормально показывает. А реально заголовок оказался: Content-type: text/plain
И под честной оперой я получил код страницы...
Сразу же подумал - менять хэдер срочно!
Но!!!
Вот так:
#!/usr/local/bin/php
<?
header("Content-type: text/html");
?>
- хэдер не меняется - говорит, он уже выдан с строке 3... Перевод строки же убрать нельзя - нужен отступ для пути к пхп.
Вот так... :(
Может не в ту сторону бегу???
#!/usr/local/bin/php
<?
header("Content-type: text/html");
?>
Options +ExecCGI
AddType text/html cgi
в .htaccess
Возможно. Результат запости. И убедись что у тебя \n а не \r\n. И убери пустую строку после шебанга.
Options +ExecCGI
AddType text/html cgi
в .htaccess
Возможно. Результат запости. И убедись что у тебя \n а не \r\n. И убери пустую строку после шебанга.
Не поверишь :)
Секунду назад подправил .htaccess на такое:
Options ExecCGI
AddType text/html .cgi
И все заработало. А потом увидел твой пост :))
Правда все равно не понятно, почему я не смог модифицировать заголовки руками: возвратов каретки нет точно. Строку убрать после пути к пхп не могу - ругается (вспоминаю перл :)). Хотя перечитал кучу форумов, вроде ее там не нужно оставлять...
Кстати, мой новый .htaccess немножко отличается от предложенного тобой, где правильно?
Не поверишь :)
Строку убрать после пути к пхп не могу - ругается (вспоминаю перл :)). Хотя перечитал кучу форумов, вроде ее там не нужно оставлять...
Кстати, мой новый .htaccess немножко отличается от предложенного тобой, где правильно?
Ты заставляешь апача слать нужный тебе хидер, но проблему ты не решил - свои хидеры слать не можешь, значит идет вывод контента ДО отработки скрипта.
Точка перед cgi нужна - моя ошибка, без точки фурычить не будет. А на счет плюса - в сомнениях ибо не в курсе его назначения. Копаю мануал.
ман апача
Поступил проще - залил файл script.cgi на ДРУГОЙ хостинг.
#!/usr/bin/php
<?php
header("Content-type: text/html");
echo 'HELLO';
?>
И все прекрасно работает.
На первом хостинге такое выдает: 500 Internal Server Error
Если сделать так:
#!/usr/bin/php
<?php
header("Content-type: text/html");
echo 'HELLO';
?>
то работает на ПЕРВОМ хостинге, НО хедеры не меняет, и правильно - перевод строки отправляется ведь в стдаут. Вот такие пироги. Хостер поймет ли... и в чем грабли...