fopen() - разрешение отклонено - несмотря на наличие правильных разрешений (насколько я могу судить)

Недавно переехал сервер и пытаюсь все настроить. Мой класс memcache записывает журналы, что мне нужно для разработки.

редактировать: сервер под управлением Ubuntu 12.04.

веб-корень /var/www/public_html

файл журнала находится в /var/www/logs/

Вот права доступа к каталогу

-rw-r--r-- 1 root root       1415 Sep  6 11:53 default
drwxrwxr-x 2 root webmasters 4096 Sep  6 12:48 logs
drwxrwxr-x 8 root webmasters 4096 Sep  6 12:32 public_html

Вот разрешения из /var/www/logs

-rw-rw-r-- 1 root webmasters 116103 Sep  6 13:02 access.log
-rw-rw-r-- 1 root webmasters  16094 Sep  6 12:48 error.log
-rw-rw-r-- 1 root webmasters      0 Sep  6 12:48 memcache.log
-rw-rw-r-- 1 root webmasters   9861 Sep  6 13:02 php_log.log

Файл, для которого используется браузер, — это /var/www/public_html/index.php.

-rw-rw-r-- 1 root webmasters 5660 Sep  6 01:51 /var/www/public_html/index.php

Индекс включает /var/www/public_html/includes/cache.php

-rw-rw-r-- 1 root webmasters 4602 Sep  6 12:47 /var/www/public_html/includes/cache.php

Участники группы:

grep 'webmasters' /etc/group
webmasters:x:1002:sftp_chris,www-data

Я даже пытался изменить /logs и /memcache.log на chmod 777.

Не совсем понимаю, почему это происходит, поскольку вы можете видеть, что php без проблем записывает свой файл журнала в /logs/php.log.

Есть идеи? Я абсолютно сбит с толку.

Я думал, может быть, это как-то связано с php-suhosin, но ничего там не нашел.

функция:

function write_to_log($string){

    $file = '/var/www/memcache.log';
    $fh = fopen($file, 'a');
    $contents = @fread($fh, filesize($file));
    $stringData = $contents."[".date('H.i:s d-m-y')."] ".$string;
    fwrite($fh, $stringData);
    fclose($fh);
}

person Chris B    schedule 06.09.2012    source источник
comment
Я прав, у вас неправильный путь в функции PHP? Вы говорите, что ваш журнал находится в /var/www/public_html/, но вы пытаетесь записать в /var/www/.   -  person zysoft    schedule 06.09.2012
comment
@zysoft, чтобы отдать ему должное, он говорит в своем журнале /var/www/logs, а не /var/www/public_html.   -  person Michael Krelin - hacker    schedule 06.09.2012
comment
Вот цитата - the log file is in /var/www/public_html. Возможно, вопрос следует отредактировать. Это немного сбивает с толку, но не отличается. Путь все равно неверный :)   -  person zysoft    schedule 06.09.2012
comment
ой, да, @zysoft, извини ;-)   -  person Michael Krelin - hacker    schedule 06.09.2012
comment
Ой вау чувствую себя немного глупо там. Потратил полтора часа на то, чтобы возиться с разрешениями и рвать на себе волосы! И журнал @zysoft был в /www/logs, но я неправильно написал в вопросе. Хотя сейчас исправили. :)   -  person Chris B    schedule 06.09.2012
comment
Спасибо за исправление вопроса, @ChrisB! Надеюсь, смена пути помогла!   -  person zysoft    schedule 06.09.2012


Ответы (1)


Вы пишете в /var/www/memcache.log, а не в /var/www/logs/memcache.log, для которого вы показываете разрешения.

(почему вы читаете лог перед записью в него?)

person Michael Krelin - hacker    schedule 06.09.2012
comment
Вау вау. Я так долго возился с разрешениями, и это все, что было: с. Явно слишком устал, чтобы работать. Извиняюсь за бессмысленный вопрос! Есть ли способ просто добавить в файл? Честно говоря, не особо искал, я предполагал, что это нужно будет прочитать и добавить! - person Chris B; 06.09.2012
comment
@ChrisB Вы уже используете его. fopen($файл, a) = Open for writing only; place the file pointer at the end of the file. If the file does not exist, attempt to create it.. Просто используйте fwrite и определите новые строки, которые вы хотите добавить. - person h2ooooooo; 06.09.2012
comment
Спасибо, @h2ooooooo, попробую! - person Chris B; 06.09.2012
comment
еще лучше, не используйте fopen/fwrite, используйте гораздо более простой И гораздо более быстрый file_put_contents (с флагом FILE_APPEND), например: file_put_contents( $log_filename, 'NEW LOG LINE' . PHP_EOL, FILE_APPEND ); - person smassey; 06.09.2012