2014-01-30 3 views
0

Я столкнулся с действительно странной проблемой. Я пытаюсь выполнить запись в файл с помощью fopen().Права доступа к PHP запрещены

Это то, что я пытался в writetofile.php:

$fw = fopen('/test.txt', 'w'); 
fwrite($fw, 'hello world' . "\r\n"); 
fclose($fw); 

Это ошибка, я получаю:

Warning: fopen(/test.txt): 
failed to open stream: Permission denied in C:\inetpub\wwwroot\writetofile.php on line 41 
Warning: fwrite() expects parameter 1 to be resource, boolean given... 

Я 100% уверен, что у меня есть права доступа к серверу. Я Администратор. Кроме того, я временно предоставил все разрешения всем. Я даже пытался запустить php-скрипт локально, непосредственно с сервера, используя localhost. Я не использую apache, я использую IIS. Я попытался перезапустить IIS после изменения разрешений. Я не запускаю php в безопасном режиме.

Любая идея о том, что может вызвать эту проблему?

ответ

0

/test.txt был бы файлом в каталоге ROOT вашей файловой системы, где учетные записи пользователей обычно не имеют прав записи (если вы не используете этот код как пользователь root). Это особенно верно для PHP, работающего под учетной записью пользователя веб-сервера.

Вы, наверное, не хотите просто test.txt (не ведущий слэш) `, который будет пытаться поместить файл в«текущий рабочий каталог»сценария - как правило, один и тот же каталог, сам скрипт в

+0

+1, Это сработало! Спасибо! Вопрос: Должен ли '/ test.txt' писать в корневой каталог, который совпадает с рабочим каталогом (C: \ inetpub \ wwwroot \) в моем случае? – AnchovyLegend

+0

Поскольку PHP работает на уровне файловой системы. Это не могло быть меньше того, на каком URL вы попали, чтобы фактически запустить php-код. Он не видит URL-адреса. Он просто видит файлы на диске вашего сервера. Он не связан корневым документом сервера –

+0

Нет fopen() использует системные пути и/является корневым каталогом вашей файловой системы «./test.txt» будет писать файл в вашем текущем рабочем каталоге –

0

1-, когда вы Свиток. сайт, удалить все имена папок журналов

2- внутри кода создать имя папки, как показано ниже, и создать журналы внутренность

3- записи в верхней части файла. (во время инициализации сети)

$ClientUserName = gethostbyaddr($_SERVER['REMOTE_ADDR']); 

function Data_Log($dataline) 
{ 
global $ClientUserName; 
$dir = 'UserInputLog' ; 
$fileName = $ClientUserName. '_ServerWebLog.txt'; 

if(is_dir($dir) === false) 
    mkdir($dir); 

    $fileName = $dir. '\\'.$fileName; 

    $myfile = fopen($fileName, "a") or die("Unable to open file!"); 
    fwrite($myfile, "$dataline\r\n"); 
    fclose($myfile); 

} 
Смежные вопросы