サポート » 使い方全般 » php.iniファイルの記載により2MBアップロード制限を乗り越える方法

  • 解決済 yzk

    (@yzk)


    こんにちは、はじめて投稿させていただきます。
    WPのバックアップデータをサーバにアップしたいのですが、サーバ側で設定している2MB制限にひっかかっていて、解決方法を求めて投稿させていただきました。

    いろいろ調べてみた結果、PHPの知識が要ると分かりました。
    こちらのフォーラムはPHPの知識を持った方がたくさんいらっしゃる、日本有数の場だと思います。
    Webでいろいろ調べてみましたが、質問に関して断片的な情報はいろいろ見つかるものの、一貫した情報を見つけることが難しく、初心者の私と同じ悩みを持つ方が他にもいらっしゃると想像します。ですので、どうぞこの場でのご質問をお許しください。
    また、WPを使い始めて日も浅いため、本当に初歩的な質問になりますことを、どうぞお許しください。

    【状況のご説明】 

    それではまず、状況からご説明させてください。
    WPのバージョンは2.8.2で、共用のレンタルサーバを使っています。
    PHPはCGIモードで動作しており、バージョン 5.2.12です。

    この環境で、WPとphpmyadminを使っていますが、ある程度データを載せたところで、phpmyadminとWP本体の両方で、バックアップを取りました。このデータは3MBほど(.xml方式)〜30MBほど(.sql方式)です。

    ところがその後すぐに、WPの表示を壊してしまいました。
    原因はいろいろだと思うのですが、バックアップデータが綺麗にありますので、バックアップデータから復元したいと考えています。
    バックアップデータが2MB以下の、他のWPで再現実験をしましたら、テーマ、プラグインおよび.xml方式のデータを戻すことで、サイトが綺麗に元に戻りました。ですので、この方法で復元したいと考えています。同時に今後の運用を考えれば、バックアップと復元は練習したいので、いいチャンスかと思いました。

    ところが共用サーバの2MB制限にひっかかって、WPの画面からデータをアップロードすることができません。
    この2MBの制限を30MBから50MBに一時的に上げたいというのが、今回のご質問の内容です。

    【サーバ側の環境】

    サーバに問い合わせてみましたところ、本当にご親切にしていただき、できる限りでさまざまな情報をいただきました。まとめますと、以下のようになります。

    ・コントロールパネルの裏の一般ユーザに見えない領域に、共用サーバ全体に作用するphp.iniファイルがある仕様になっている。

    ・このphp.iniファイルの2MB制限に関して、それを書き換える作用をするphp.iniファイルを、ドメイン直下(私の設定の場合は、index.phpと同じ階層)を載せる。そうすると、php.iniファイルの設置ディレクトリに対して、この数値が適用されるので、私のドメインのあるディレクトリ以下のWPとphpmyadminの設定数値が変わる。
    これはサーバの方で許可されている操作だそうです。

    ・php.iniファイルの設置およびソースコードに関しては、サポート外とのことです。
    同様に、さくらさんやチカッパさんのように、php.iniファイルのソースコードが実際に見られて、当方で数字だけ書き換えればオッケーの仕組みにはなっていません。

    ・.htaccessファイルでの容量UPは、サーバの仕様として無効だそうです。いろいろ調べてやってみたのですが、やはりうまくいきませんでした。

    ・サーバで教えていただいた範囲では、共用サーバ全体に影響するphp.iniの設定は

    post_max_size = 8MB
    memory_limit = 16MB

    max_imput_time = 60
    max_execuse_time = 30

    そして
    uproad_max_filesize = 2MB

    となっているそうです。
    やはり
    uproad_max_filesize = 2MB
    の数値にだけ問題がありそうです。
    ですので、こちらでphp.iniファイルに数値を指定して、この数値を書き換えればよいのではないか? とサーバの方はおっしゃっていました。

    【重ねてご質問】

    ドメイン直下、WPのindex.phpの設置ディレクトリに、実際にphp.iniファイルを乗せてみました。
    php.iniファイルはWinのメモ帳で作り、文字コードはUnicodeで処理して乗せました。

    さまざまなソースを調べて自分なりに書いてみたのですが、なにぶんにもPHPの基礎的な知識がないので、やはりファイルがちゃんと作用しません。
    そこでご質問なのですが、

    1)上記の状況の場合、「サーバのphp.iniファイルの uproad_max_filesize = 2MB を、30MB(ぐらいに)変更」というPHPコードを書けばよいと思うのですが、そのコードはどう書けばよいのでしょうか?

    2)指定してあげるのは uproad_max_filesize = 2MB の書き換えだけで良くて、memory_limitやpost_max_size, max_impute_time, max_execuse_time には言及しなくてよいのでしょうか。

    3)この件を調べていて、PHPのフォーラムでこんなコードを見つけたのですが、

    (以下引用です)<?php
             echo ‘Maximum file size: ‘ . convertBytes( ini_get( ‘upload_max_filesize’ ) ) / 1048576 . ‘MB’;
             ?>

    (以上 ttp://www.php.net/manual/ja/faq.using.php#faq.using.shorthandbytes引用です/頭のhは取ってあります)
    ここに30MBなどと入れる形でよいのでしょうか?

    なにぶん知識が不足していて、質問も本当に申し訳ないのですが、今のサーバが気に入っているので、できれば動きたくありません。
    サーバスタッフの方々も、サポート権限の及ぶ範囲で丁寧に教えてくださっているので、できればこのソースコードで制限を突破したいです。

    PHPエキスパートの皆様のお知恵をお借りできますと、本当に幸いです。
    お忙しいところとは思いますが、どうぞよろしくお願い致します。

    長い文章をお読みいただきまして、どうもありがとうございました。

15件の返信を表示中 - 1 - 15件目 (全17件中)
  • ・このphp.iniファイルの2MB制限に関して、それを書き換える作用をするphp.iniファイルを、ドメイン直下(私の設定の場合は、index.phpと同じ階層)を載せる。そうすると、php.iniファイルの設置ディレクトリに対して、この数値が適用されるので、私のドメインのあるディレクトリ以下のWPとphpmyadminの設定数値が変わる。

    これの仕組みがよく分かっていないので恐縮ですが・・・
    で、結局

    ですので、こちらでphp.iniファイルに数値を指定して、この数値を書き換えればよいのではないか? とサーバの方はおっしゃっていました。

    をやってみても変化がなかったと言うことですか??

    index.phpと同じところに、例えば、info.phpとして中身は

    <?php
    phpinfo();
    ?>

    として開いてみて、それがどうなっているかを調べてみてください。

    showBOOさん、こんにちは!

    ご返信いただきまして、心からありがとうございます!
    (PHP素人の私が手探りの1週間でしたので、本当に心細かったです;)
    投稿を見つけてくださって、どうもありがとうございました。

    いただいた指示を、さっそくやってみました。
    手順にもし間違いがありましたら、どうぞ教えてください。よろしくお願い致します。

    ・ info.phpファイルを作りました。
      これはindex.phpファイルをコピーして作りました。
    ・ info.phpのソースを、上記指示いただきましたものに書き換えました。
    ・ index.phpと同じ階層にアップしました。
    ・ ftpで接続して、直接info.phpファイルの中身を覗きました。

    そうしましたら、ソースの記載は

    <?php
    phpinfo();
    ?>

    と同じでした。
    通常であればきっと、情報が落ちてくるのですよね?
    何か手順を間違ったのでしょうか。
    本当にお手数をおかけしますが、教えていただけると嬉しいです。
    どうぞよろしくお願い致します。

    そして、お忙しいところお返事をいただきまして、本当にありがとうございました!
    重ねてお礼申し上げます。

    説明不足でした・・・

    <?php
    phpinfo();
    ?>

    と記述したファイルinfo.phpをアップロードして、
    それをブラウザで表示させてみてください。
    PHPの環境設定等の数値がずらっと出てくるはずです。

    showBOOさん、こんばんは!

    お返事ありがとうございました。
    そして……。私も自分を「アホや」と思いました。
    投稿を送ってから移動している途中に、ホントはshowBOOさんが書いてくださったことをしなければならないと気づきました。スミマセン。

    おかげさまで、PHPの情報がずらーっと出てきました。
    今回の設定に関係のありそうなところですと、

    (一部抜粋)
    max_execution_time 30 30
    max_file_uploads 20 20
    max_input_nesting_level 64 64
    max_input_time 60 60
    memory_limit 128M 128M
    open_basedir no value no value
    output_buffering no value no value
    output_handler no value no value
    post_max_size 8M 8M
    (以上抜粋)

    こんな表示が出てきました。

    手探りから、だいぶ景色が見えてきた感じです。ここで定義されている数値を書き換えるべく、php.iniファイルでソースコードを書いてあげればいいということですよね。

    ……書き方が分かりません。
    ぜひ、教えてください。
    引き続きよろしくお願いします!

    そしてお忙しい中、定期的にレスをチェックしてくださって、本当にありがとうございます。重ねて感謝申し上げます。

    こんばんは、大変お世話になっております。
    引き続きの書き込みを、どうぞお許しください。

    今回のPHPの件で、知己をフルに当たって教えていただいているのですが、教えていただいている方のうちお一方から、ご返信をいただきました。

    又聞きしていただいたプログラマーさん(実際のサーバ環境は見ていただいていない)によりますと、設定箇所は、

    php_value memory_limit 20M
    php_value post_max_size 20M
    php_value upload_max_filesize 20M
    php_value max_imput_time 60

    (20MBでテストした場合)
    になると教えていただきました。

    そうすれば、想像するところによると、PHPの式は

    <?php

    (ここに「以下の値を変更する」のような何かが入る?)

    php_value memory_limit 20M
    php_value post_max_size 20M
    php_value upload_max_filesize 20M
    php_value max_imput_time 60

    (ここには何か入る?)

    ?>

    こんな感じになるという理解で宜しいでしょうか。

    引き続きまして、ご助力をいただけますと嬉しいです。
    どうぞよろしくお願い致します。

    php.iniファイルでソースコードを書いてあげればいいということですよね。

    php.iniとはサーバーの設定ファイルのことです。phpでできたファイルではありませんね。
    したがって、

    <?php
    
    (ここに「以下の値を変更する」のような何かが入る?)
    
    php_value memory_limit 20M
    php_value post_max_size 20M
    php_value upload_max_filesize 20M
    php_value max_imput_time 60
    
    (ここには何か入る?)
    
    ?>

    これも間違いかと・・・
    当然サーバーによって変更可能なものと可能でないものもあり、サーバーによってはphp.iniファイルを触らせてくれない、.htaccessで制御する、などの場合もあります。
    ご利用のサーバー会社に問い合わせてみましょう。(設定方法などはサーバー会社のWebサイトなどに書かれている場合が多いですよ)

    各ユーザーがphp.iniを上書きできるというのは、やはりサーバーのセキュリティー上あまりよろしくないことです。(shokun0803さんがおっしゃるように、設定できる値とそうでない者があるとは思いますが・・・)

    その辺りをレンタルサーバ会社に聞いてみた方がいいと思います。

    こんばんは、お返事が遅くなってすみません。
    showBOOさん、shokun0803さん、お忙しい中ご返信をいただきましてありがとうございました。

    shokun0803さん、情報ありがとうございました。
    php.iniファイルは、PHPではないのですね!
    すみません、知りませんでした。メモ帳からUnicodeに処理してUPしましたが、てっきりPHPと思っていました。それではコードの書き方を間違えていたと思います。
    ご指摘ありがとうございます。

    サーバのことに関しまして、重ねてのご説明をお許しください。
    私の説明が分かりよくなかったかもしれませんので、重ねてお書き添えさせていただきます。

    いちばん最初の、ご説明の投稿にお書きした通り、

    ・サーバ側からphp.iniファイルの設置の許可は出ています。
     これはサーバ的に合法で、サーバの方と二人三脚で進めています。
     ただサーバ会社でサポート外ですから、具体的なことはしていただけないのです。
     当然マニュアルもありませんし、案内の掲載もありません。

     ですのでソースコードを調べています。
     ソースコードさえ書ければ、サーバ公認のもと、設置は許可です。

     (共用サーバですので、全員にはしてほしくない、でも知っている人にはできるという
      消極的行為にしておきたいのだと感じています。)

    ・.htaccessでコントロールする方法は、サーバ側から推奨されていません。
     コントロールパネルの裏で動いている、サーバ側の.htaccessの設定とかち合うからです。
     試しにやってみても、うまくいきませんでした。
     うまくいかないのと、サーバが勧めていない(php.iniファイルの設置の方を勧めている)
     ので、.htaccessの方法は採らない方向です。

    重ねてのご説明になりましたことを、どうぞお許しください。

    そのような事情ですので、今後もiniファイルにお詳しいどなたかが、お知恵をお貸しいただけますと嬉しいです。
    どうぞよろしくお願い致します。

    重ねてお二方とも、ご多忙中本当にありがとうございます!

    .htaccessによってphpを設定する方法とphp.iniでphpを設定する方法では書き方が違います。

    #.htaccessでの書き方(php_valueは文字列セット用、php_flagは論理値セット用。「=」なし)
    php_value memory_limit 20M
    php_value post_max_size 20M
    php_value upload_max_filesize 20M
    php_value max_imput_time 60

    ;php.iniの書き方(コメントアウトの方法も↑と違います。「=」あり)
    memory_limit = 20M
    post_max_size = 20M
    upload_max_filesize = 20M
    max_imput_time = 60

    ↑のようにエディタで編集してphp.iniという名で保存したうえで、しかるべき場所にアップロードすれば、サーバー側で認めているものに関してのみ変更が反映されると思います。置き場所によって適用範囲の違う場合があるかもしれません。その点はサーバー側に確認してください(冒頭に書いてありますね)。設定後、設定値の変更が反映されているか、phpinfo()で確認してくださいね。

    akihiroさん、おはようございます!
    ご返信をいただきまして、どうもありがとうございました。

    akihiroさんのご説明により、今まで疑問だったソースの書き方の差が、分かってきました。
    ぐぐっていても、どうして「=」とか「php_value」とかがついていたり、なかったりするんだろう? と疑問でした。
    .htaccessとphp.iniでは、ソースコードの中の要素が違うんですね。
    またひとつ、すっきりと理解できました。
    どうもありがとうございました!

    だんだん正解が近づいてきたと思いますので、もう一度丁寧に確認させてください。

    サーバ側によれば、問い合わせはちらほらあるそうなので、同じ問題を抱えて設定を変えている人は(多分)いるのだと思います。またサポート外ではあるものの、サーバのwebには「お客様でご設定ください」と書いてありますので、書いておきながらブロックしているということは、ないと思います。

    サーバのサポートページにこんな記載があります。

    なおphp.iniの読み込み優先度は下記になります。
    1) ホームディレクトリに設置の「php.ini」
    2) PHPスクリプトを実行するディレクトリに設置の「php.ini」
    3) 共用サーバ共通の「iph.ini」

    この記載に基づきますと、3)の前に1)と2)が存在すれば、そちらの「php.ini」ファイルの方が優先して読み込まれると理解しています。
    その上で、index.php(ドメイン直下)と同じディレクトリに設置してくださいと、サーバ側から確認をいただいておりますので、1)のことを差しているのだと思われます。

    このような理解のもと、
    ・ドメイン直下
    ・wpフォルダの中
    両方に1回ずつ、php.iniファイルの設置をテストしてみました。
    (2ファイルを同時に置いたという意味ではありません)

    ただ、残念ながらどちらのテストでも反映されませんでしたので、手順をもう一度確認させてください。
    以下、私が取った行動です。

    1)akihiroさんから教えていただいたソースコードを、
      そのままWinのメモ帳にペーストしました。

    2)ファイルのタイトルは「php.ini」です。
      ぐぐってみたら「php.ini.」というファイル名も存在したのですが、
      サーバの案内も「php.ini」になっていますので、こちらにしました。

    3)この「php.ini」ファイルを、文字コードをUnicodeで処理して保存しました。

    4)ドメイン直下と、wpフォルダ直下のどちらでも1回ずつ設置を試してみました。
      info.phpで情報を見てみました。

    この処理で、残念ながら数値の変更が見られませんでした。
    もし私が、手順やコードを間違っていたら教えていただけると嬉しいです。
    「あとちょっと!」という感じがしますので、どうぞよろしくお願いします!

    そして、お忙しいところ、本当にありがとうございます!
    少しずつですが、php.iniの知識を理解できてきて、本当に感謝しています。

    こんにちは、投稿主のyzkです。
    前の投稿をしてから「!!(アホかも。)」と気づきました。

    ひとつ前の投稿の1)番に追記させてください。
    もし想定が正しかったら、ぜひ教えていただけませんでしょうか。そしてコードも教えていただけますと、本当に幸いです。どうぞよろしくお願い致します。
    (そして「そんな当たり前のことを知らんのか」という言葉は、ご親切に飲み込んでいただけると嬉しいです。正式な勉強をしたことがないので、本当に分からないのです。)

    akihiroさんの投稿に「コメントアウトの方法」という記述がありました。
    そこであらためて、WPの.htaccessファイルを見てみましたら、

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /wp/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /wp/index.php [L]
    </IfModule>

    # END WordPress

    みたいになっていました。指定する内容を、

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    (内容)
    </IfModule>
    # END WordPress

    で囲う形にしていますよね。
    つまり先ほどakihiroさんに教えていただいたphp.iniのコードも、こういう式の中に置いてあげないといけないという理解で宜しいでしょうか。
    (私はそれを、<?php ?>で囲ってあげるのかとカンチガイしていたのですが、これが違ったことは私にも分かりました。)

    php.iniファイルを正常に動かすために、akihiroさんに教えていただいた4行

    memory_limit = 20M
    post_max_size = 20M
    upload_max_filesize = 20M
    max_imput_time = 60

    を、もし何かで囲って指定してあげなければいけないのだとしたら、私にはその式が見当もつきません。
    見当のついている方、どうぞ教えてください! 
    よろしくお願いします!!

    php.iniファイルには囲いは必要ありませんよ。

    で、私もそのままコピペしてしっかり目を通していなかったのですが、
    max_imput_timeではなくてmax_input_timeですね(mとnの違いです 汗)。

    yzkさんの設定項目には目を通していないのでまだ何とも言えません。解決につながるか分かりませんが、今じっくり検証している間がないのでちょっとお時間ください。

    今までの経緯をみると、php.iniが反映されていいと思うのですが・・・・

    ちなみに、

    3)この「php.ini」ファイルを、文字コードをUnicodeで処理して保存しました。

    というのはどういう処理をされたのですか?

    この際ですので、メモ帳ではなく、
    UTF-8で保存できるテキストエディタの使用をオススメします。
    フリーでたくさんあります。

    私のサイト上に置いてあるphp.iniに上記四つのキーと値をセットしてみたところ、数値はちゃんと反映されました。メモ帳を使ってテストはしてません。

    1行ずつ試したりしましたか?
    それでダメというのなら…、やはりエディタなのかなぁ。

    akihiroさん、そしてshowBOOさん、コンバンハ!

    本当にご親切に、ありがとうございます。
    感謝です。
    私にとっては、壊してしまったデータを復旧できるか、そして今のサーバに居続けられるか(親切なサーバなのでうつりたくない!)の瀬戸際ですので、皆さまに温かくお助けいただいていること、本当に嬉しいです。

    もしかしたらエディタのコード処理なのかもしれませんので、MacとWin両方で試してみます。
    そして文字コードはUTF-8ですね?
    分かりました。
    (imput → inputも直します。すみません、私こそ気づかなくて。)

    そしてakihiroさん、お忙しいところ再現実験までやっていただいて、本当にありがとうございます。「ホントに反映されるんだ!」と、希望が持ててきました。
    (これだけはじかれると、もしかして永久に無理なのか!? とか希望の火も消えかかって……笑)

    ちょっとやってみます! 元気が出てきました。
    お忙しいとは思いますが、引き続きあたたかく見守っていただけると嬉しいです。
    どうぞよろしくお願いいたします。

15件の返信を表示中 - 1 - 15件目 (全17件中)
  • トピック「php.iniファイルの記載により2MBアップロード制限を乗り越える方法」には新たに返信することはできません。