• 締切済み

ファイル作成に失敗する

@pagesとE-Townという2つのサーバーで同じPHPプログラムを動作させるのですが、 @pagesのほうは、phpファイルがあるパス上にしかファイルやディレクトリを作成できません。 パーミッションを手動で777に設定してもダメでした。 何が原因で、どのように対処したらいいのでしょうか? <コード> file_put_contents("file1", "piyo"); mkdir("./testdir"); chmod("./testdir", 0777);             <- ここまでは両者とも成功する file_put_contents("./testdir/file2", "piyo"); <- @pagesではこれが失敗する よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数2

みんなの回答

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.2

セキュリティの理由で、ディレクトリのパーミッション777 は使えないようにしてるところも結構ありますよ、@pagesもそのようです。 共有サーバーにプログラムをアップロードするなら、そこのヘルプはつぶさに読むべきだと思う。 http://www10.atwiki.jp/atpagesguide/pages/16.html#id_2e8e3298

minimax2005
質問者

お礼

回答ありがとうございます。 ヘルプは見ていろいろ試したのですが、うまくいきませんでした。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

phpの動作モードは確認されていますでしょうか。作成したディレクトリのownerは何になっていましたか? また0777でなく、0707とか0705、0701などでもダメでしたか?

minimax2005
質問者

お礼

回答ありがとうございます。 0707とか0705、0701などもだめでした。 オーナーは、他のファイルはみな私のユーザー名だったのに、作成したディレクトリは2ケタの数字でした。 これはphpスクリプトを動作させているユーザーの番号なのでしょうか? 動作モードはsafe_modeだと書いてありました。

minimax2005
質問者

補足

動作モードとはCGI版かモジュール版かということだったですね。 Server API  : Apache 2.0 Handler と書いてあって、モジュール版でした。

関連するQ&A

  • 別ユーザ所有のディレクトリ内にファイル作成できない

    こんばんは。 タイトルのとおりですが、まずPHPでディレクトリを作成し、 その中にindex.htmlを作成しようとしているのですが上手くいきません。 PHPで作成したディレクトリの所有者はapacheになっているためかと思い、 実際にFTPを通して自分で作成したディレクトリの中にindex.htmlを作成したところ上手くいきました。 ディレクトリのパーミッションはいずれもスクリプトにより0777を指定しています。 このように、PHPのみでディレクトリを作成し、その中にファイルを作成する といったことが出来ずにいます。解決策等ございましたらお教えください。 参考までに、ソースを掲載しておきます。 これを設置するディレクトリのパーミッションは0777にしてみましたが、出力は「fopen error」になります。 <?php $path = "./dir/"; if(mkdir($path, 0, true)){ chmod($path, 0777); if($fp = fopen($path."index.html", "w")){ fputs($fp, $put); fclose($fp); print "Created!"; }else{ print "fopen error"; } }else{ print "mkdir error"; } ?>

    • ベストアンサー
    • PHP
  • PHPを使ってのサーバ上ファイルのパーミッションの変更方法

    PHPおよびPEARを使って、FTPサーバ上のファイルのパーミッションの変更をしたいと考えています。 具体的には、 PEARを利用し、$ftp->put()でアップしたファイル($filename)を、700に属性変更したいのです。 ソース上は、 chmod($filename, 0700); と書いています。 ところが、実行すると以下のようなワーニングが出ます。 「Warning: chmod() [function.chmod]: No such file or directory in ・・・」 今度は、 $ftp->chmod($remote_folder[$i]. $filename, 0700); と書いて実行してみるとエラーは出ません。 しかし、パーミッションは変わっていませんでした。 次に、 「PEARの命令を使って実行すればいいんだ!」と考えて、 $ftp->execute(chmod($filename, 0700)); と書いて実行してみました。 結果は、最初と同じ、 「Warning: chmod() [function.chmod]: No such file or directory in ・・・」 というワーニングでした。 いったい何がいけないいんでしょうか(--; phpのマニュアルを見ると、chmodに、「この関数では、 リモートファイルを使用することはできません。」とあります。 が、教えて!gooなどで検索してみると、chmodを使って普通にサーバ上のファイルのパーミッションを変更している書き込みが見られます。 正直、混乱しているというか、よく分からない状態です。 皆様、気がついた点などありましたら、是非、アドバイスお願い致します。

    • ベストアンサー
    • PHP
  • function.fileに関してお尋ねします。

    サーバーへphpを使用した配布phpを設置したのですが、 phpのブラウザ上にfunction.fileと表示が出るためクリックすると、 403エラー ページが見つかりません。と表示されます。 確かめたのですがfunction.fileというようなものはダウンロードしたものに含めれておらず頭を傾げてるところです。 詳しい方が入ましたらご指導願いますでしょうか よろしくお願いします。 function.file-put-contentsではありませんので

    • ベストアンサー
    • PHP
  • chmodでのパーミッション

    実行すると、同じディレクトリにあるディレクトリとその中のファイルを同じ階層にディレクトリを新規に作って、その中のファイルを全部コピーするスクリプトを組んでいます。 コピーはうまくいったのですが、パーミッションの設定がうまくいきません。 例えば @chmod("$dir/xxx.cgi",0755)or die("エラー"); と書くと、パーミッションは363になってしまいます。 5ファイルくらいあるのですが、他のパーミッション(例えば666など)も137になってしまいます。 Webを検索してもこういった事例にはおめにかからないのですが、私の使っている2つのサーバーで、どちらも同様の結果でした。 何がいけないのでしょうか? よろしくお願いいたします。 #ついでにmkdirも作成はできるのですが、パーミッションが必ず755になってしまいます。 #作成されたディレクトリやファイルのownerは、1つめのサーバーではnobody、もう一つのサーバーではログインユーザーになります。 #サーバーはどちらもLinuxです。 #PHPのヴァージョンは、1つめが4.3.1、2つめが4.3.4です。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPから外部コマンドを使ってファイルやディレクトリを新規作成するには?

    LinuxのFedora10で、PHPで外部コマンドを使ってサーバ内にディレクトリを新規作成したいのですができません。 /var/www/uuu内に、index.phpを設置し、その中の一部に以下のようなスクリプトを書いています。 <?php system("pwd"); system("touch fff"); system("mkdir ddd"); ?> system("pwd")は/var/www/uuuという結果を出してくれます。しかし、system("touch fff")やsystem("mkdir ddd")に関しては全く結果を出してくれません。 (PHP自体のエラーではないようです。) どうやら、外部コマンド自体はうまく機能してくれているみたいなのですが、ディレクトリやファイルを新規作成することができないようなのです。 /var/www内のディレクトリuuuのパーミッションを777にして、オーナーを一般ユーザにしてやってみても同様にうまくいきません。 どのようにすれば、PHPから外部コマンドを使ってファイルやディレクトリを新規作成することができるでしょうか? よろしくお願いします。

  • 外部ファイルの読み込み

    3つのファイルが同じディレクトリに入っているのですが、「main.php」を開くとphpがそのままテキストで表示されてしまいます。 phpを読み込んでhtml化した状態で表示するにはどうしたらいいでしょうか? test.txt ----------- テスト ----------- test.php ----------- <?PHP file_get_contents("test.txt"); ?> ----------- main.php ----------- <?PHP file_get_contents("test.php"); ?> ----------- main.phpを開くと ----------- <?PHP file_get_contents("test.txt"); ?> ----------- と表示されてしまいます。

    • ベストアンサー
    • PHP
  • PHPでの自動作成されるファイルが

    ファイルの読み込み自体や、 既存ファイルへの書き込み等は問題がないようですが、 「新規」でファイルの追加が出来ない状況です。 つまりPHPで自動生成されるスクリプトが動作しません。 サーバー移転で、新しいサーバーのみ動かない状況です。 前回以下の回答がありましたが ----------------------------------------------------- PHPを実行しているスクリプトがファイルを作成する場合 ファイルの所有者はsystem(Apache)になると思われます。 要するに作成しようとするファイルの親ディレクトリの 所有者がsystem(Apache)であり、所有者書き込みが可能 のパーミッション(700)になっている場合か、親ディレクトリの 所有者がsystem(Apache)以外であるなら、所有者以外の 書き込みが許可(707もしくは777)になってなければ 新規ファイルの作成は失敗します。 ----------------------------------------------------- ユーザー用ディレクトリ(仮にuserとします) 所有者はアカウント、パーミッションは777です 登録があれば、userディレクトリにIDの名前で新しくディレクトリが作成され そのID名のディレクトリの中に必要なファイルも自動的に作成されます この登録が動作しません・・・ ファイルが新しく作成されない状態です。 試しに手動でUPすると、動作は正常でした。 ファイルの自動作成のみが動作しません。 パーミッションもこれで合っているように思えるのですが・・・ 原因が分かりません・・

    • ベストアンサー
    • PHP
  • ローカルホストでディレクトリ作成

    いつもお世話になっております。 現在、自宅でphpを使って開発をしています。 mkdirを使用してディレクトリを作成しようとしてるのですが、 サーバー上ではパーミッションの設定をその他に対して書き込み権限を与えればうまくいくのですが、 ローカルホスト上では「Permission denied 」エラーが出てうまく作成できません。 IIS6.0でどうやってパーミッションを操作するのかが分からず困っています。 どのようにすればローカル環境でディレクトリ作成できるかお教えください。 開発環境は以下の通りです。 言語:php5 WEBサーバ:IIS6.0 以上、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • アップロードファイルのパーミッションについて

    送信フォームから画像ファイルをアップロードさせるページを作成しました。 そのアップロードされた画像ファイルについてですが、 パーミッションは600となっています。 これを604にしたいのですが、毎回1つ1つ手動で変更する以外に便利な方法は無いでしょうか?(スクリプトにパーミッションを指定する関数を組み込むなど) ちなみに、下記が現在のアップロード用phpソースです。 ============================================================== if (is_uploaded_file($pic_tmp)) { move_uploaded_file($pic_tmp, "../pic/" .$pic_name)) } ============================================================== どなたか有識者の方でご教示頂けましたらどうか宜しくお願い致します!

    • ベストアンサー
    • PHP
  • webサーバにディレクトリを作るときの有無チェック

    phpのある関数内でwebサーバにディレクトリを作っています。 ここで作ろうとしているディレクトリが既にあるとエラーになるため、そのディレクトリがなければ作るようにしていますが、 ・目的のディレクトリと同名のファイルがない(作られない)ことが分かっている ・この関数が呼ばれる頻度が高い とき、下記のどっちの方法が良いのでしょうか? 1.そのディレクトリが無ければ作る if(!file_exists($newDir)) {  mkdir($newDir); } 2.エラーを無視する @mkdir($newDir);

    • ベストアンサー
    • PHP