2016-07-06 11 views
1

Androidの携帯電話からapache2を実行しているRaspberry Piのサーバにファイルをアップロードします。私は動作していないphpでこれを行いたいので、問題を最小限の例に減らしました。私はその問題が許可に関係していると思う。私は自分のPC上のブラウザからこのファイルにアクセスした場合、私は内にあるものを実行した場合、私は許可がサーバにファイルを書き込むことを拒否されました

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 

を取得

<!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> 

は、サーバー上の次のwtest.phpファイルを持っていますphpタグをRaspberry Piサーバーのスクリプトとして使用すると、正常に動作します。 一時的に wtest.phpとgcmフォルダの権限を777に変更しました。私はこれが永久的な解決策のための悪い考えであることを知っていますが、問題を絞り込むために簡単に試しました。

これまでのところ、何も効果がありませんでした。すべてのヘルプは非常に

+0

Webサーバーのユーザーとファイルの所有者が同じ場合は、本当ですか?あなたは書かれているはずのファイルに対して 'chmod 777'をしますか? –

+0

@PraveenKumar書き込まれるファイルは、コードが実行されるまで実際には存在しません。 PHPが作成します。サーバー上で実行されるスクリプトでは正常に動作しますが、ブラウザでは動作しません。 – NickT

+0

[get_current_user()](http://php.net/manual/en/function.get-current-user.php)で実行されているオーナー/グループphpを確認して、Webフォルダの所有者/グループを同じ。 – 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

私はUbuntuのラップトップでPHP 7とApache2を使って試してみましたが、出力は 'Failed'でした。 – NickT

+0

私はフォルダを作成し、wtest.phpをインストールしました。そのマシンでも失敗しました。それはApacheの問題でなければならない、私はそれがいくつかのRaspbianの奇妙さかもしれないが、明らかにそうではないことを期待していた。 – NickT

+0

@NickTファイルを作成して試してみることはできますか? –

関連する問題