В доступе отказано, журнал ошибок - PullRequest
2 голосов
/ 18 января 2011

Я пытаюсь создать простой журнал ошибок, который записывает ошибки php на случай, если они не могут быть сообщены администратору (с подключением к базе данных).Я написал это:

function errorLog($array)
{
    $time = date("F j, Y, g:i a");
    $ip = $_SERVER['REMOTE_ADDR'];
    $no = $array['e-no'];
    $string = $array['e-string'];
    $file = $array['e-file'];
    $line = $array['e-line'];
    $context = $array['e-context'];

    $string = "TIME {$time} IP {$ip} ERROR {$no} | {$string} | {$file} | {$line} | {$context}";
    if ($handler = fopen('log/log-file.txt', 'a'))
    {
        fwrite($handler, $string);
        fclose($handler);
    }
    else
    {
        exit('Fatal Error #0002');
    }
}

НАЧАЛО РЕДАКТИРОВАНИЯ

Функция стала

function errorLog($array)
{
    $time = date("F j, Y, g:i a");
    $ip = $_SERVER['REMOTE_ADDR'];
    $type = $array['e-type'];
    $string = $array['e-string'];
    $file = $array['e-file'];
    $line = $array['e-line'];
    $context = $array['e-context']
    $string = "ON {$time} IP {$ip} ERROR {$type} | {$string} | {$file} | {$line} | {$context}"; 
    if (!error_log($string, 3, 'log/log-file.txt')) { exit('Fatal Error #0002'); }
}

КОНЕЦ РЕДАКТИРОВАНИЯ

Но когда я запускаю его, я получаю

Warning: fopen(log/log-file.txt) [function.fopen]: failed to open stream: Permission denied in myfile.php on line 17

Я понял, что это проблема с правами доступа к серверу, но я работаю на локальном хосте (Xampp на Mac OS X), и я хотел бы управлять этимразрешения.Как я могу разместить журнал / только для записи?Есть ли лучшие способы сделать то, что я пытаюсь сделать?

1 Ответ

8 голосов
/ 18 января 2011

Я понял, что это проблема с правами доступа к серверу, но я работаю на локальном хосте (Xampp на Mac OS X) и хочу управлять этими разрешениями.Как я могу разместить журнал / только для записи?Есть ли лучшие способы сделать то, что я пытаюсь сделать?

Возможно, вы захотите оформить заказ set_error_handler , чтобы убедиться, что все ошибки автоматически отправляются через вашу пользовательскую функцию.Во всяком случае, это не источник вашей проблемы, ваша проблема на самом деле разрешения на сервере.Теперь, первое, что нужно сделать, это определить, каков пользователь PHP.Это может быть очень просто определить, вам просто нужно запустить этот скрипт:

<?php
echo `whoami`;

В случае вашего Mac это, вероятно, «www-data».Если вы хотите изменить это (возможно), вам следует вникнуть в (как) Apache MPM ITK .Если у вас все в порядке с «www-data», запускающими ваши скрипты, вы должны предоставить «www-data» доступ к каталогу журнала.Сначала перейдите в родительский каталог и введите команду 'ls -laF', чтобы просмотреть подробную информацию о каталоге журналов.Допустим, вывод выглядит следующим образом:

rwxr-xr-x 2 berry berry 4096 2011-01-18 16:53 log /

В этом случае I (пользователь «berry»)) будет владельцем.Группа, в которой я в первую очередь (а именно, «ягода»), является группой, которой принадлежит каталог.Теперь вы можете сказать по rwx rx rx, что владелец (первый rwx) может читать, писать и выполнять.Второй (группа) может читать и выполнять.Другие (все остальные) могут читать и выполнять.

"www-data", вероятно, не входит в группу "berry".Чтобы это исправить, вы должны ввести команду: chgrp -R www-data log/, затем chmod -R g+x log/.Это означает: измените группу-владельца на "www-data", и дайте группе (g) разрешение на выполнение (+ x), сделайте это рекурсивно (-R) в каталоге "log /".

Удачи.

...