• 締切済み

パーミッションの3桁目を6にせずにファイルを作る

$fp = fopen( "a.html", "w" ); fputs( $fp,$buffer); fclose( $fp); (一部省略) このようなプログラムで、すでにあるa.htmlの内容を少し変化させて新しいa.htmlページを作っていきたいのですが、サーバーで試したところ、パーミッションに関するエラーが出ました。 644だったパーミッションの3桁目を6(646など)にするとファイルを作ることができました。 しかし、3桁目を6にするとセキュリティ上危険だそうで、そうしたくありません。 3桁目を6にせずにファイルを作る良いアイデアはありませんでしょうか? htmlを自動生成している人はパーミッションの3桁目を6にしているのでしょうか? よろしくお願いします。

みんなの回答

  • elf2000
  • ベストアンサー率50% (6/12)
回答No.2

下記の条件を満たすと自分がユーザー(正確にはPHPスクリプトと同じユーザー&グループ)のファイルが作成できます. ・CGI SAPIのPHPを用いる ・suexecが有効になっており,該当PHPスクリプトの処理に影響するようにする 結構難しいことを書いていますが,関連情報は参考URLを参照してください.

参考URL:
http://php.net/security.cgi-bin
bavarois
質問者

お礼

お礼が遅くなってすみません。m( _ _ )m 私には難しすぎました。 ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

PHPを動かしているユーザに権限がないためだと思います。 ファイルを作成したユーザとPHPのユーザと違うためです。 たぶん664で動くような気がします。 PHPが作成したファイルならば自分のファイルになるので644で動くはずです。 (ただし、他のユーザで操作できなくなりますが) http://www.kent-web.com/pubc/axsken/

bavarois
質問者

お礼

お礼が遅くなってすみません。m( _ _ )m ファイルを作成した所有者とPHPファイルの所有者は同じなのですがファイルを作れませんでした。 664や644でも動きません。 ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • これは・・・・

    $fp = fopen ($IMODEFILE, "w"); fputs($fp, $data); fclose($fp); がエラーにでるのですが・・・・ どうしたら解決できますか? 初心者ですいません・・・

    • 締切済み
    • PHP
  • ファイルを開いたままオープンモードを変更したい

    $fp = fopen ($file, "r"); flock ($fp, 2); で開いたファイルをロックを解除しないままファイルを空にして書き込みモードに移行する方法を教えてください。 或いは $fp = fopen ($file, "r+"); flock ($fp, 2); からfputs()で書き込んだ後にファイルのファイルポインタ以降の部分を切り捨てる形でも良いです。 flock ($fp, 2);の後にfgetsによりファイル内容を取得した後ファイルロックをしたままファイルの余計な部分を捨てたいので $fp = fopen ($file, "w"); flock ($fp, 2); や $fp = fopen ($file, "r"); flock ($fp, 2); fgets ($fp); flock ($fp, 3); fclose ($fp); $fp = fopen ($file, "w"); flock ($fp, 2); は必要ありません。

    • ベストアンサー
    • PHP
  • 配列をファイルに書き込む方法

    下記($dataに入ってる)配列をファイルに書き込みたいのですが、書き込み方法が分かりません、教えていただけませんでしょうか・・・。 $dataの中身は Array ( [0] => あいうえお [1] => かきくけこ [2] => さしすせそ [3] => たちつてと ) これを $fp=fopen("1.txt","w"); fputs($fp,$data); fclose($fp); にするとArrayとだけ表示されます。 あいうえお\n かきくけこ\n さしすせそ\n たちつてと\n と書き込みたいのですが・・・、お願いします。

    • ベストアンサー
    • PHP
  • fscanf()

    fcanf()がうまくいきません。 画面には、42640888のような数値が表示されます。 どこが間違ってるか教えてください。 (test.txtに23と書いてあるとします。) #include<stdio.h> int main(void) {    FILE *fp;    FILE *fp1;    char str[10];    int a;    fp=fopen("test.txt","r")    fp1=fopen("a.txt","w")    while(!feof(fp)){       fgets(str,8,fp);       fputs(str,fp1);    }    fscanf(fp,"%d",&a);    printf("%d",a);   fclose(fp);   fclose(fp1);   return 0; }

  • ファイルへの書き込みについて

    test.phpというスクリプトを作成しています。 ファイルを指定して指定文字列"ABCD"を書き込むという処理です。 =========================== $MOJIRETU="ABCD" $fp=fopen("./TEST/TEST.html", "w"); fputs($fp,$MOJIRETU); fclose($fp); =========================== という処理です。 ですが、どうしてもファイルが作成されません。 実際に書き込むファイルは存在しませんが、 マニュアルを見るとfopenはファイルが未存在の 時は作成すると書いてありました。 権限(?)の問題かと思い、test.phpを'777'に変更しましたが 作成されませんでした。 どのような問題が推測されるでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • C言語でファイルを出力

    ファイルの中に変数をいれて複数のファイルをつくろうとしたのですが、 できたファイルの後に?マークがついてきます。 file = fopen("filename.txt", "w"); for(j=0; j<30; j++){ fprintf(file ,"%d.dat\n",j ); } fclose(file); file2 = fopen("filename.txt", "r"); として、ファイル名を書いたファイルをつくってから、 for(k=0; k<30; k++){ fgets(fp,sizeof(fp),file2); file_out = fopen(fp,"w"); 省略 fprintf(file_out, %e %e \n",a ,b); fclose(file_out); } fclose(file2); をして、30個のファイルを出力すると、 0.dat? 1.dat? 2.dat? . . . 29.dat? というファイルができてしまいます。 ファイルの中はしっかりできています。 なにか解決法を知っている方がおりましたら、どうか教えて下さい。

  • flockについて

    PHPを始めようと思っていきなりつまずいています。 flockについてなんですが <?php $fp = fopen("ファイル名","a"); flock($fp,LOCK_EX); fputs($fp,"aaa"); flock($fp,LOCK_UN); fclose($fp); ?> は正しいですが $fp = fopen("ファイル名","w") とかにしてしまうとファイルロックの意味がありませんよね (ロックする前にファイルを丸めてしまってて、このプロセスの後readすると実際と異なる値を読んでしまうから) で、この場合 (つまり"w"や"w+"をファイルオープンの引数にとってflockするとき) fopen の前に、ロックを示すためのディレクトリを作成しておいて、書き込んだ後にディレクトリを削除する、というような独自の仕組みを作る必要があると思うんですが、具体的にどういうソースになるか教えてください

    • ベストアンサー
    • PHP
  • ファイル作成

    $fp = fopen($filename1,"a+"); flock($fp,LOCK_EX); fputs($fp,$kisai); flock($fp,LOCK_UN); fclose($fp); としてファイルがなかったら作成するようにして$kisaiの内容を保存するようにしました。 それで問題なく実行できます。 しかし文字コードがANSIで保存されてしまいます。 UTF-8で保存させるようにするにはどうしたらよいでしょうか

    • ベストアンサー
    • PHP
  • ファイルへの書き込み

    フォームに入力されたデータをCSVファイルに書き込みたいのですが、以下のようにすると追加で書き込みはできるのですが、ずっと改行されずに1行に書き込まれてしまうので、新しいデータを入れる際に改行されるようにしたいのですが、どのようにすればいいでしょうか? $fp = fopen(TEST_FILE,"a") or die("ファイルを開けません\n"); flock($fp, LOCK_EX); fputs($fp, "aaa")."\n"; flock($fp, LOCK_UN); fclose($fp);

    • ベストアンサー
    • PHP
  • ファイルの内容の削除【ファイルシステム関数】

    以下のユーザー定義関数で、POSTで受け取った数値の増減をあるファイルに書き換える作業をおこないたいのですが、1桁の数値であれば問題ないのですが、2桁の数値にし、マイナスの数値で減らすと値が「00」となってしまいます。文字列として認識してしまっているためかとは存じますが、良い解決方法が思い浮かびません。以下ソースです。 <? function cnt($str){ if(isset($_POST[$str])){ $fp = fopen( $str.".txt", "r+" ); flock($fp,2); $count = fgets( $fp, 5 ); $strstr = $_POST["$str"]; $count+= $strstr; rewind( $fp ); fputs( $fp, $count ); flock($fp,3); fclose( $fp ); print($count); }else{ $fp = fopen( $str.".txt", "r" ); $count = fgets( $fp, 5 ); print($count); };} ?> ファイルシステム関数については苦手で、うまく理解しきれていません。 アイデア・解決法をご存知の方がいらっしゃいましたら、ご回答いただければうれしいです。よろしくお願いいたします。

    • ベストアンサー
    • PHP