phpでのファイルアップロードに付いて教えてください。


あるサーバーAでは動作しているのですが、
あるサーバーBに同じものをアップすると
ファイルのアップロードができません。

考えられる原因を教えてください。

php のバージョンは 4.3.4 です。
(共用のレンタルサーバー使用)

ちなみに以下の全てで何も表示されません。
(フォームのname属性は img1です。)

print $img1_name;
print $_FILES['img1']['name']
print $HTTP_POST_FILES['img1']['name']

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/05/14 16:23:17
  • 終了:2007/05/15 23:20:41

回答(4件)

id:Yota No.1

Yota回答回数453ベストアンサー獲得回数282007/05/14 16:30:10

ポイント23pt

1.Apacheなどのウェブサーバを使っていると思いますが、そのApacheのユーザがアップロードしようとしているフォルダ(ディレクトリ)に書き込む権限を与えられていなければ、アップロードできません。

2.php.iniでfile_uploads = Onになっていない。

id:worldtravel

パーミッションは707と777で試しました。

file_uploadsはOnになっています。

2007/05/14 17:40:16
id:cooper0524 No.2

cooper0524回答回数296ベストアンサー獲得回数42007/05/14 17:12:35

ポイント23pt

php.iniの設定で、

file_uploads

がOnであること

upload_max_filesize

のサイズがアップするファイルより大きいこと

upload_tmp_dir

のディレクトリが存在すること、パーミッションが書き込み可になっていること

を確認してみてください。

id:worldtravel

file_uploadsはOnになっています。

upload_max_filesizeは2Mです。

(アップしようとしているファイルは20KB程度です)

upload_tmp_dirはno valueです。

がサーバーAも同様ですがそちらはアップロードできます。

2007/05/14 17:47:05
id:tezcello No.3

tezcello回答回数460ベストアンサー獲得回数692007/05/14 19:07:33

ポイント22pt

http://www.php.net/manual/ja/ini.core.php#ini.upload-tmp-dir

値が設定されていないと、システムの値を使うとなっていますから、

サーバAとサーバBではそれらが違うのでは?

Aではそのディレクトリに対する書き込み許可があるが、Bではないと。

で、

>>サーバーのデフォルトディレクトリは、 PHP を実行する環境において環境変数 TMPDIR を設定する ことにより変更することができます。<<

という事なので、こちらが設定されていないか設定されているディレクトリが書き込めないと。

「php.ini または httpd.confで設定可能なエントリ」だそうですから、これらが変更できない場合は不可能でしょうね。

id:worldtravel

ありがとうございます。

明日サーバーの管理者に聞いてみます。


他に心当たりがありましたらお願いします。

もちろん他の方でも構いません。

よろしくお願いします。

2007/05/14 19:28:06
id:gekikawa No.4

gekikawa回答回数110ベストアンサー獲得回数112007/05/15 01:20:20

ポイント22pt

>print $img1_name;

>print $HTTP_POST_FILES['img1']['name']

このような形で呈示されているので、もしかしたら...


サーバーAではregister_globals = Onになっていて、

外部からの変数取得に、スーパーグローバル変数を使っていない部分

がある可能性はないですか?

サーバーBはデフォルトでregister_globals = Offだと思うので、

不具合の原因となるかも知れません。


あと$_FILES['img1']['error']はいかがでしょうか?

id:worldtravel

ありがとうございます。

register_globalsは両方ともOffです。

もしかしてと思い一応

>print $img1_name;

>print $HTTP_POST_FILES['img1']['name']

とも書きました。

$_FILES['img1']['error']も

$_FILES['img1']['name']同様に

何も表示されません。

2007/05/15 08:55:42
  • id:GEN111
    たぶん違うと思いますが、送信フォーム側が enctype="multipart/form-data" になってないとか。
  • id:worldtravel
    ありがとうございます。
    そのようになっております。
    サーバーAでは問題なく動作しております。
  • id:Yota
    SELinuxの設定で、書き込ませないか。
    fopen('hoge','w');
    をそのディレクトリで実行したら、ファイル作れますか。
  • id:worldtravel
    すいません。
    SELinuxの設定で、書き込ませないか。
    こちらの意味はわかりませんでした。

    fopen('hoge','w');
    こちらはファイルを生成できます。
    アップロードしたいディレクトリ内で実行しても生成できますし、
    別のディレクトリで実行しても生成できました。

    一応...
    このように書いて実行しました。

    $fp = fopen('./hoge.txt', "w");
    set_file_buffer($fp, 0);
    flock($fp, 2);
    fputs($fp, "xxxxx");
    flock($fp, 3);
    fclose($fp);

  • id:worldtravel
    ホスティング会社に聞いたところ
    ファイルはアップロードできないようにしてあるとの事でした。

    どうやっても無理な訳ですね。

    皆様ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません