2016-10-09 6 views
0

Я застреваю, пытаясь открыть файл с fopen в php.PHP не умеет читать файл

 $db_ausgaenge = "statuseing.php"; 
     $dout = fopen($db_ausgaenge, "x+"); 
     print $dout; 
     print(shell_exec('whoami')); 
     print(shell_exec('pwd')); 
     print(shell_exec('id')); 
     fwrite($dout, $out); 
     fclose($dout); 

Warning: fopen(statuseing.php): failed to open stream: File exists in /var/www/html/zufallsgenerator.php on line 33 

Я проверил следующие пункты:

  • CHMOD для statuseing.php 0777
  • владелец WWW-данные с Groud WWW-данных
  • скрипт работает как WWW-данных пользователя
  • группы являются uid = 33 (www-data) gid = 33 (www-data) groups = 33 (www-data)
  • pwd is/var/www/html как ожидалось
  • Путь, который скрипты хотят открыть, правильный
  • проверено openbase dir в php.ini, показанное в phpinfo(), добавлено/var/www/html, но php не заботится об этом.

    open_basedir =/вар/WWW/HTML/

После демон-перезагрузки и перезагрузки apache2 через systemctl ничего не изменилось, phpinfo() не показать пути, указанному в конфигурации. перезапуск системы через init 6 тоже не вступил в силу.

ответ

1

statuseing.php уже существует.

Смотрите руководство (http://php.net/manual/en/function.fopen.php) - открытие в х или х + режим говорит: Create and open for writing only; place the file pointer at the beginning of the file. If the file already exists, the fopen() call will fail by returning FALSE

+0

местами метод открытия для «ш +», и теперь он работает нормально. спасибо за упоминание этой проблемы. –

+0

, хотя это не ваша проблема, лично я всегда предпочитаю установить полный путь к файлу перед вызовом функции fopen() или аналогичных функций. –

1

Посмотрите на режим, который вы используете.

x + означает, что если файл уже существует, будет выдана ошибка.

Чтобы найти правильный режим в зависимости от сценария проверить http://php.net/manual/en/function.fopen.php

0

Попробуйте это:

$db_ausgaenge = __DIR__."/statuseing.php"; 
    $dout = fopen($db_ausgaenge, "a+"); // x+ will throw error cuz it tries to open existing file, thx to: bluegman991 (; 
    print(shell_exec('whoami')); 
    print(shell_exec('pwd')); 
    print(shell_exec('id')); 
    fwrite($dout, $out); 
    fclose($dout); 

или если Вы хотите усечь файл перед добавлением использования данных w+:

$db_ausgaenge = __DIR__."/statuseing.php"; 
    $dout = fopen($db_ausgaenge, "w+"); 
    print(shell_exec('whoami')); 
    print(shell_exec('pwd')); 
    print(shell_exec('id')); 
    fwrite($dout, $out); 
    fclose($dout); 

также проводят некоторые проверки:

1) проверить наличие свободного пространства: df -h
2) Проверьте, если Вы можете редактировать этот файл: nano /var/www/html/statuseing.php