Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Warning fopen()

Ответить
Настройки темы
Warning fopen()

Аватара для xamelion

Пользователь


Сообщения: 122
Благодарности: 1

Профиль | Отправить PM | Цитировать


Есть вот такая функция:
Код: Выделить весь код
function add_log($var_func)
{
include_once "config.php";
include_once "connect_db.php";
$fp = fopen ("$squid_log_path/access.log.$var_func","r");
while ($userinfo = fscanf ($fp, "%s\t%s\t%s\t%s\t%d\t%s\t%s\t%s\t%s\t%s\t")) {
    list ($datetime, $session, $ip_client, $http_code, $size, $request_m, $url, $ident, $data_host, $type) = $userinfo;
$date_ok = date('Y-n-j H:i:s', strtotime('+3 hour', $datetime));

$ip_drop = sscanf($ip_client, "%d\x2E%d\x2E%d\x2E%d");
    list ($ip1, $ip2, $ip3, $ip4) = $ip_drop;
$ip1_h = dechex ($ip1);
$ip2_h = dechex ($ip2);
$ip3_h = dechex ($ip3);
$ip4_h = dechex ($ip4);

    $result = mysql_query("INSERT INTO squid_log VALUES ('$ip1_h','$ip2_h','$ip3_h','$ip4_h','$date_ok','$url','$http_code','$size','$session')")
        or die("Invalid query");
    if ($result)
    echo "<FONT COLOR=GREEN>ok</FONT><BR>";
    else
    echo "<FONT COLOR=RED>false</FONT>";

}; // while
fclose($fp);

} //func
если ДО функции в коде написать код
Код: Выделить весь код
add_log(1);
то функция вызовится нормально, если же написать вот такой код
Код: Выделить весь код
add_log(1);
add_log(8);
то выдается вот такая ошибка
Код: Выделить весь код
 Warning: fopen(/access.log.8): failed to open stream: No such file or directory in /var/www/html/project/squid.php on line 101

Warning: fscanf(): supplied argument is not a valid File-Handle resource in /var/www/html/project/squid.php on line 102

Warning: fclose(): supplied argument is not a valid stream resource in /var/www/html/project/squid.php on line 124
Опять же, если просто использовать функцию
Код: Выделить весь код
 add_log(8);
то функция вызывается.

Отправлено: 01:00, 23-09-2005

 
mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


xamelion
хорошо, но давайте, чтобы не было сомнений и можно было идти дальше, введите в начале функции echo $squid_log_path и давайте посмотрим, что вернется.

Отправлено: 23:12, 23-09-2005 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для xamelion

Пользователь


Сообщения: 122
Благодарности: 1

Профиль | Отправить PM | Цитировать


Кто верит в приведения ?
В общем... читаю вышеуказанный пост mar, захожу на сервер, логинюсь, нахожу нужный файл, нахожу нужную функцию, перед функцией ставлю такой код
Код: Выделить весь код
add_log(1);
add_log(8);
запускаю, браузер лагает, но выводит ответ первого и восьмого файла, я протирая глаза с просони... нажимаю F5 браузер выводит ответ функции первого и восьмого лога, гляжу вызов цункции, повторно его записываю, бегу в браузер, браузер чуть чуть тужится и выводит ответ первого и восьмого лога. Дастается зажигалка, прикуривается сигарета, ведется пятиминутное раскуривание-обдумывание. Нажимается F5 браузер неохотно выводит ответ, удаляются все "временный файлы" в браузере. Повторяется кнопка f5 результат "отлично". Господа, я первый раз поподаю в такую неловкую ситуацию, и мне очень стыдно перед вами. Дело в том что я со времени написания поста неизменял код т.к. валялся, да и воляюсь с температурой. к машине собственно имею доступ только я. Я больше чем уверен что во всем виноват личный ККР, Еще раз извеняюсь что..... что такой профан в php.
P.S. ККР - Коофициент кривизны рук.

Отправлено: 07:49, 24-09-2005 | #12


Аватара для xamelion

Пользователь


Сообщения: 122
Благодарности: 1

Профиль | Отправить PM | Цитировать


ой.. еще раз прошу прощения, ошибка так и остается открытая, в связи со своей невнимательностью я при последнем тесте убрал переменную $squid_log_path и на ее место поставил путь целиком до файловой системы ( об этом я писал в последнем посте ) и так и не убрал это.
mar
Код: Выделить весь код
function add_log($var_func)
{
include_once "config.php";
include_once "connect_db.php";
echo "$squid_log_path <BR>";
$fp = fopen ("$squid_log_path/access.log.$var_func","r");
while ($userinfo = fscanf ($fp, "%s\t%s\t%s\t%s\t%d\t%s\t%s\t%s\t%s\t%s\t")) {
    list ($datetime, $session, $ip_client, $http_code, $size, $request_m, $url, $ident, $data_host, $type) = $userinfo;
$date_ok = date('Y-n-j H:i:s', strtotime('+3 hour', $datetime));

$ip_drop = sscanf($ip_client, "%d\x2E%d\x2E%d\x2E%d");
    list ($ip1, $ip2, $ip3, $ip4) = $ip_drop;
$ip1_h = dechex ($ip1);
$ip2_h = dechex ($ip2);
$ip3_h = dechex ($ip3);
$ip4_h = dechex ($ip4);

    $result = mysql_query("INSERT INTO squid_log VALUES ('$ip1_h','$ip2_h','$ip3_h','$ip4_h','$date_ok','$url','$http_code','$size','$session')")
        or die("Invalid query");
    if ($result)
    echo "<FONT COLOR=GREEN>ok</FONT><BR>";
    else
    echo "<FONT COLOR=RED>false</FONT>";
}; // while
я добавил эхо, результат вот такой:
Код: Выделить весь код
/opt/squid/var/logs/ 
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok
ok


Warning: fopen(/access.log.8): failed to open stream: No such file or directory in /var/www/html/project/squid.php on line 105

Warning: fscanf(): supplied argument is not a valid File-Handle resource in /var/www/html/project/squid.php on line 106

Warning: fclose(): supplied argument is not a valid stream resource in /var/www/html/project/squid.php on line 128
exit
вывод "ОК" "зеленым цветом", это ничто иное как удачно записанная строка из лога.

Если поменять вызов цункций местами, Вот так например:
Код: Выделить весь код
add_log(8);
add_log(1);
то получается вот такой ответ:
Код: Выделить весь код
/opt/squid/var/logs/ 
ok
....
( В связи что в файле "access.log.8" 1082 Строки, ответ чуть чуть порезан для читабельности)
....
ok
ok
ok
ok
ok
ok
ok
ok


Warning: fopen(/access.log.1): failed to open stream: No such file or directory in /var/www/html/project/squid.php on line 105

Warning: fscanf(): supplied argument is not a valid File-Handle resource in /var/www/html/project/squid.php on line 106

Warning: fclose(): supplied argument is not a valid stream resource in /var/www/html/project/squid.php on line 128
exit

Отправлено: 08:25, 24-09-2005 | #13


Аватара для elfoflorien

Старожил


Сообщения: 158
Благодарности: 1

Профиль | Отправить PM | Цитировать


xamelion
если не сложно, напиши, пожалуйста код config.php. может, что-нибудь прояснится
это случайно не phpBB2?

-------
panem et circences! (c)


Отправлено: 09:50, 24-09-2005 | #14


Аватара для xamelion

Пользователь


Сообщения: 122
Благодарности: 1

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
<?php
$wpath = "/project/";
$squid_log_path = "/opt/squid/var/logs/";
?>

Отправлено: 11:00, 24-09-2005 | #15


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


xamelion
Я не уверен, что в этом ошибка, но мало ли что бывает...:
У Вас переменная $squid_log_path содержит /opt/squid/var/logs/ , то есть уже с закрывающим слешем , но когда вы вызываете функцию fopen, вы используете такой адрес в качестве параметра $squid_log_path/access.log.$var_func , опять со слешем, то есть путь до файла сейчас /opt/squid/var/logs//access.log.$var_func , что естественно не очень правильно в контексте определённой ОС, либо система ищет файл /access.log.$var_func

Попробуйте один из слешей убрать, что получиться?

Отправлено: 13:04, 24-09-2005 | #16


Аватара для xamelion

Пользователь


Сообщения: 122
Благодарности: 1

Профиль | Отправить PM | Цитировать


Я уже постил по поводу "правильности написания слешей" http://forum.oszone.net/showthread.php?t=53904 но меня проигнорили....
я попробую сейчас изменить слеши, когда ответ дам, незнаю, потому что в москве щас из за падения линии проблемы с сайтами .net .com и вообще что дальше москвы

Отправлено: 13:34, 24-09-2005 | #17


Аватара для xamelion

Пользователь


Сообщения: 122
Благодарности: 1

Профиль | Отправить PM | Цитировать


убрал один слешь с файла config.php результат такой же.
убирать слешь со страки этот $squid_log_path/access.log.$var_func нету смысла. получится "$squid_log_pathaccess.log.$var_func"

Отправлено: 13:46, 24-09-2005 | #18


Аватара для xamelion

Пользователь


Сообщения: 122
Благодарности: 1

Профиль | Отправить PM | Цитировать


Может поможет весь код целиком?
дейсвия начинаются с файла index.php откуда передается параметр find_squid_file После чего вызывается функция find_squid_file();
Код: Выделить весь код
<?
////////////////////////////////////////////////////////
foreach($_REQUEST as $index => $val)
   {
        if ('find_squid_file' == $index )
        find_squid_file();
        if ('show' == $index )
        show_ii();

        if ('show_log0' == $index )
        add_log(0);
        if ('show_log1' == $index )
        add_log(1);
        if ('show_log2' == $index )
        add_log(2);
        if ('show_log3' == $index )
        add_log(3);
        if ('show_log4' == $index )
        add_log(4);
        if ('show_log5' == $index )
        add_log(5);
        if ('show_log6' == $index )
        add_log(6);
        if ('show_log7' == $index )
        add_log(7);
        if ('show_log8' == $index )
        add_log(8);
        if ('show_log9' == $index )
        add_log(9);
        if ('show_log_all' == $index )
        all_log();


        echo "exit<br>";
        exit();
   }
////////////////////////////////////////////////////////
?>

<?
///////////////////////////////////////////////////////////////////////////
function find_squid_file()
{
include "config.php";
$a_while = 0;
while ($a_while <= 9){
global $squid_file;
$squid_file[] = file_exists("$squid_log_path/access.log.$a_while");


$a_while++;
}; //while



show_file_log();
?>
<form action = "squid.php" method="post">
<input type="submit" name="show_log_all" value="перечитать все логи"><br>
</input>
</form>
<?
}; //func
/////////////////////////////////////////////////////////////////////////////
?>

<?
/////////////////////////////////////////////////////
function all_log()
{


add_log(8);                                                 //  Временно вызваны 2 функции, ниже цикл закоментирован
add_log(1);                                                 //  по пречине описанной чуть ниже, как только цикл заработает, цикл будет вызывать функции с переменными.

/* 
   global $squid_file;                                      //    Вот с этим циклом у меня тоже проблемы, я пытаюсь 
   foreach ($squid_file as $index => $var){                 //    их решить один, т.к. не решался закидывать 
     if ($var == 1){                                        //    весь "флуд-код" на форум, так же замечу что php я занимаюсь меньше месяца, 
        add_log($var);                                      //    поэтому я уверен что ошибок тут будет миллион. Одну критику я уже воспринил,
   };                                                       //    это поповоду mysql базы, правильнее будет вставлять данные не в цикле, а копить
}; //foreach                                                //    их, а затем целиком вставить. В общем то критика очень даже приветствуется.
                                                            //    Тут проблема в том что после строки global $squid_file; массив пустой :(

*/

}; //func
/////////////////////////////////////////////////////
?>

<?
/////////////////////////////////////////////////////////////////////////////
function add_log($var_func)
{
include_once "config.php";
include_once "connect_db.php";
echo "$squid_log_path <BR>";
$fp = fopen ("$squid_log_path/access.log.$var_func","r");
while ($userinfo = fscanf ($fp, "%s\t%s\t%s\t%s\t%d\t%s\t%s\t%s\t%s\t%s\t")) {
    list ($datetime, $session, $ip_client, $http_code, $size, $request_m, $url, $ident, $data_host, $type) = $userinfo;
$date_ok = date('Y-n-j H:i:s', strtotime('+3 hour', $datetime));

$ip_drop = sscanf($ip_client, "%d\x2E%d\x2E%d\x2E%d");
    list ($ip1, $ip2, $ip3, $ip4) = $ip_drop;
$ip1_h = dechex ($ip1);
$ip2_h = dechex ($ip2);
$ip3_h = dechex ($ip3);
$ip4_h = dechex ($ip4);

    $result = mysql_query("INSERT INTO squid_log VALUES ('$ip1_h','$ip2_h','$ip3_h','$ip4_h','$date_ok','$url','$http_code','$size','$session')")
        or die("Invalid query");
    if ($result)
    echo "<FONT COLOR=GREEN>ok</FONT><BR>";
    else
    echo "<FONT COLOR=RED>false</FONT>";

}; // while
fclose($fp);

} //func
//////////////////////////////////////////////////////////////////////////////
?>

<?
///////////////////////////////////////////////////////////////////////////////
function show_file_log()
{
include_once "config.php";
global $squid_file;                               // А тут он например без проблем работает.
    foreach ($squid_file as $index => $var){
        if ($var == 1){
            ?>
            <form action = "squid.php" method="post">
            <input type="submit" name="show_log<?echo $index;?>" value="пересчитать лог-файл access.log.<?echo $index;?>">
            </input>
            Размер <?echo filesize("/opt/squid/var/logs/access.log.$index")?> байт.
            Создан <?echo date('Y-n-j H:i:s', (filemtime("/opt/squid/var/logs/access.log.$index")))?>
            </form>
            <?
        };
}; //foreach
}; //func
//////////////////////////////////////////////////////////////////////////////
?>

Отправлено: 14:10, 24-09-2005 | #19



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Warning fopen()

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
error! Warning: mysql_num_rows() dihlof0s Вебмастеру 5 05-08-2008 11:10
Warning SCECLI EndErr Microsoft Windows NT/2000/2003 4 18-07-2007 16:41
как с помощью fopen писать в файл на своем диске vagner_HATE Вебмастеру 7 04-10-2005 21:47
Warning disk ZloiJoker Microsoft Windows NT/2000/2003 7 13-03-2004 22:13
Warning NetLogon ZloiJoker Microsoft Windows NT/2000/2003 11 29-01-2004 15:40




 
Переход