2016-07-06 2 views
1

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

имеют следующий wtest.php файл на сервере:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/s$ 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 

<?php 
echo 'Current script owner: ' . get_current_user(); 
echo "\n"; 

$file2 = fopen('testfile2', 'w'); 
if ($file2 === false) 
{ 
    print_r(error_get_last()); 
} 
$fwrite2 = fwrite($file2, 'hello'); 
if ($fwrite2 === false){ 
    echo "\n"; 
    echo "write 2 error\n"; 
} 
else{ 
    echo "write2 OK\n"; 
} 
fclose($file2); 
?> 
</html> 

Если я этот файл из браузера на моем компьютере, я получаю

Current script owner: pi Array ([type] => 2 [message] => fopen(testfile2): failed to open stream: Permission denied [file] => /var/www/gcm/wtest.php [line] => 8) write 2 error 

Если я бегу, что находится внутри php в качестве скрипта на сервере Raspberry Pi, он работает нормально. Временно Я изменил разрешения на 777 в папке wtest.php и gcm. Я знаю, что это плохая идея для решения на постоянной основе, но я попытался кратко попытаться сузить проблему.

До сих пор ничего не сработало. Любая помощь будет оценена

+0

Вы уверены, что пользователь веб-сервера и владелец файла совпадают? Вы хотите сделать 'chmod 777' в файле, который должен быть написан? –

+0

@PraveenKumar Файл, который должен быть записан, фактически не существует до тех пор, пока код не будет выполнен. Php создает его. Он работает нормально в сценарии, запущенном на сервере, но не через браузер. – NickT

+0

Проверьте, что владелец/группа php работает под [get_current_user()] (http://php.net/manual/en/function.get-current-user.php), затем установите владельца/группу веб-папки на одна и та же. – Novocaine

ответ

1

Вместо ниже исходный код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/s$ 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 

<?php 
echo 'Current script owner: ' . get_current_user(); 
echo "\n"; 

$file2 = fopen('testfile2', 'w'); 
if ($file2 === false) 
{ 
    print_r(error_get_last()); 
} 
$fwrite2 = fwrite($file2, 'hello'); 
if ($fwrite2 === false){ 
    echo "\n"; 
    echo "write 2 error\n"; 
} 
else{ 
    echo "write2 OK\n"; 
} 
fclose($file2); 
?> 
</html> 

Пожалуйста, замените выше file_put_contents как это:

Эта функция идентична вызову fopen(), fwrite() и fclose() последовательно записывать данные в файл.

<?php 
if (file_put_contents("testfile2", "hello") !== false) 
    echo "File Written"; 
else 
    echo "Failed"; 
?> 

Кроме того,

Если имя файла не существует, файл создается. В противном случае существующий файл будет перезаписан, если не установлен флаг FILE_APPEND.

Примечание: Просто замените весь файл вышеуказанным содержимым. Нет необходимости в DocType Definition.

+0

Ran it, вывод был «Failed» – NickT

+0

Я попробовал это на своем ноутбуке Ubuntu с PHP 7 и Apache2. Я создал папку и установил wtest.php. Он также потерпел неудачу на этой машине. Это должна быть проблема Apache, я надеялся, что это может быть какая-то рапсская странность, но, видимо, нет. – NickT

+0

@NickT Можете ли вы попробовать создать файл и попробовать это? –

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