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


Автор: BETEP 14.3.2007, 00:59
Всем привет.
Такая проблема:
Пишу скрипт на php для самостоятельной работы в командной строке Linux. Скрипт делает запрос к базе на mysql, затем, в зависимости от результата шлет письмо. Проблемка в том, что при попытке соединения в стандартный поток ошибок записывается какая-то ошибка с кодировками, для меня совсем не существенная. Подскажите, что сделать, чтобы эта ошибка не отображалась на экране? Наиболее простым мне кажется решение перенаправить stderr в /dev/null, но я не знаю как.

Автор: GZep 14.3.2007, 01:40
буферизацию выходного потока не пробовали использовать? (функции ob_*)

Автор: BETEP 14.3.2007, 01:44
нет. можно пример, я попробую.

Автор: GZep 14.3.2007, 01:50
Код

echo "привет";
ob_start();
echo "ошибка(не выведется)";
ob_end_clean();
echo "пока";

Автор: BETEP 14.3.2007, 02:03
Код

ob_start();
fwrite(STDERR, "stderr");
echo "stdout";
ob_end_clean();


В результате "stdout" не вывелось, а вот "stderr" - вывелось.

Автор: GZep 14.3.2007, 15:12
Ну, а вам то что надо? просто перехватить сообщение об ошибке...

Автор: BETEP 14.3.2007, 17:12
Мне нужно, чтобы сообщение, которое появляется при вызове mysql_connect, не попадало в stderr. Т.к. то, что попадает туда, шлется на мыло руководителю отдела, а скрипт срабатывает каждые пять минут... И все это, почему-то ему не нравится.  smile 

Автор: GZep 14.3.2007, 18:11
BETEP, выкладывайте весь скрипт целиком.

Автор: BETEP 15.3.2007, 09:21
ОК. Приду на работу - выложу

Автор: BETEP 16.3.2007, 17:37
Код

#!/usr/bin/php -q 
<?
    $msg = "";
    
# Connection to server, than backup-server
    $db = "db";
    $user = "user";
    $pass = "pasword";
    $server1 = "ip:port";
    $server2 = "ip:port";
    $link = mysql_connect($server1,  $user,  $pass);
    if (!$link)
    {
        $link = mysql_connect($server2, $user, $pass);
        if (!$link)
            $msg = "Connecting to DB has failed\n";
    }
...
?>

Во время вызова mysql_connect() в stderr пишется что-то типа "Codepage #51 not found ... " 

Автор: Vaulter 16.3.2007, 18:28
так запускайте Ваш скрипт как
./script.php 2>/dev/null

Автор: Alex13 17.3.2007, 15:47
BETEP, а если перед mysql_connect() поставить @ ?

Автор: BETEP 17.3.2007, 21:14
Цитата(Vaulter @  16.3.2007,  18:28 Найти цитируемый пост)
./script.php 2>/dev/null

Как-то это не серьезно, хотелось бы все-таки средствами php решить вопрос.

Цитата(Alex13 @  17.3.2007,  15:47 Найти цитируемый пост)
а если перед mysql_connect() поставить @ ?

Попробую. А что это значит?

Автор: Всемогущий 17.3.2007, 21:20
заткнуть вот этой вот @ глотку той функции которая кричит о разных ошибках smile 

Автор: BETEP 17.3.2007, 21:25
Вставил @. Поглядим, если начальник матюкаться перестанет, значит сработало.  smile 

Автор: BETEP 21.3.2007, 12:44
Всем спасибо. Проблема решена.  smile 

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