2012-01-22 11 views
1

可能性の重複:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in select- 許可のfopenの問題()とfwriteの()

ユーザーがアカウントを登録すると、自分のプロフィールをすることになっています自動的に、関数fopen()を使用して作成されたので、のような:

$fh = fopen($profile_path.$username_file.'.php', "w"); 
fwrite($fh, $tpl_and_values); 
fclose($fh); 

のための最初のパラメータ、変数の値が与えられたときは、profile/Auser.phpのようになります。 $tpl_and_valuesはテンプレートファイルへのパスを与えるだけです。

Warning: fopen(profile/givenusername.php) [function.fopen]: failed to open stream: Permission denied in /f5/tagzor/public/registeraccount.php on line 109 

Warning: fwrite() expects parameter 1 to be resource, boolean given in /f5/tagzor/public/registeraccount.php on line 110 

Warning: fclose() expects parameter 1 to be resource, boolean given in /f5/tagzor/public/registeraccount.php on line 111 

(Registeraccount.phpは、上記のコードは存在するページです。)

を、私はそれがCHMODのいくつかの種類である必要があります考えています。ここでは

は私が取得していますエラーですアクセス許可の問題Registeraccount.phpは655に設定されているので、何が間違っているのか分かりません。 777を与えることは悪い考えかもしれませんが、私は間違っている可能性があります。

+0

ファイルを所有しているユーザーと、Webサーバーを実行しているユーザーは何ですか?一時的に666または777に設定してテストしましたか?また、PHPファイルを動的に作成するべきではありません。システムを危険にさらす危険性があります。 – Brad

答えて

2

あなたの質問には、かなりのセキュリティ問題が含まれています。

など。私は、あなたがあなたのデータを浄化していることを願っています - ユーザーが "../index"として登録すればどうですか?

は、しかし.. Registeraccount.phpの


権限を使用すると、表示されるエラーには関係ありません。

あなたは$profile_pathが書き込み可能であることを確認する必要があります:$fh = fopen($profile_path.$username_file.'.php', "w");は、スクリプトの行109であると仮定すると

。はじめに/f5/tagzor/public/profileは書き込み可能な世界(777)

エラーがなくなるはずです。あなたはしかし、最も可能性の高い権限が可能な場合は、777を維持する必要があるそのフォルダの所有者を変更しない場合:

  • を変更PHPを実行しているユーザーへのプロファイルフォルダの所有者(内のファイルの所有者を確認しますそのフォルダ)は、少なくともだけウェブサーバのユーザは、そのフォルダ内のファイルを作成することができるような制限されます755

から

  • 設定権限。

  • +0

    お返事ありがとうございます。はい、私は事前にデータを消毒しています。ただし、profile /はフォルダです。 '$ username_file'は実際のファイルです。動的に作成されているため、権限を変更できません。あなたはフォルダのパーミッションを変更する方法があると言っていますが、私はそれを行うべきですか? –

    +0

    はい問題は、フォルダのアクセス許可によって発生します。 – AD7six

    +0

    私はそれが一種だと思います。私は私のテキストエディタのFTPではなく、私のFilezilla FTPでアクセス許可を変更しようとしていた...それはそれを修正しました。フォルダ全体にCHMOD 777だけのセキュリティ問題はないでしょうか? –

    2

    Registeraccount.phpは655になる可能性があります(実際は644 *となるはずです)が、ここで重要なのはファイルの所有権です。 Webサーバーユーザー(www-data、apache、ユーザーが何であれ)が書き込み可能である必要があります。したがって、ファイルがそのユーザーによって所有されていない場合は、所有者またはグループをそのユーザーに変更する必要があります。

    それはWebサーバのユーザーがグループの所有権に変更された場合、655に関しては664

    # Set group ownership to the web server user 
    chown currentuser.apache Registeraccount.php 
    
    # Set write permissions for the group 
    chmod 664 RegisterAccount.php 
    

    *に権限を設定 - ファイルを示すことになるそのグループおよびその他の非所有者によって実行可能です。これを実行可能にしたくない可能性が高いため、644は適切な権限です。ファイル所有者の読み書き、グループなどの読み取り専用です。

    +0

    これは.htaccessファイルに入りますか? –

    +0

    @ MarkLyonsいいえ、それは.htaccessではありません。権限を設定するには、Webホストのコントロールパネルまたはシェルアカウントを使用する必要があります。上の例はシェルアカウントを想定していますが、あなたがCPanelのようなものしか持っていない場合は、そこからオーナーシップを設定する方法を見つける必要があります。 –

    +0

    私はほとんど自由な言葉を使用していますので、見つけたらお知らせします。 –