PHPでアップロードできる上限は2GBまで!【POSTの場合】


<form action="hoge.php" enctype="multipart/form-data" method="POST">
<input name="hogefile" type="file" />
<input type="submit" value="送信" />
</form>

PHPを使用して、このような形式でファイルをアップロードする場合、アップロードされるファイルサイズの上限はphp.iniで設定されています。(正確には.htaccessやPHP自身でも設定できますが。)

php.iniには、アップロードファイルの上限を設定する箇所が3つあります。

  • memory_limit(使用できるメモリの上限設定)
  • post_max_size(POSTされるデータの上限設定)
  • upload_max_filesize(アップロードされるファイルサイズの上限設定)

です。

それぞれ

memory_limit >= post_max_size >= upload_max_filesize

という関係になっています。

つまり、「upload_max_filesize」をいくら増やしても、「post_max_size」で設定されているサイズ以上のファイルはアップロードできないし、「post_max_size」を増やしても、「memory_limit」で設定されているサイズ以上のファイルはアップロードできないというわけです。

例:

memory_limit = "128MB"
post_max_size = "512MB"
upload_max_filesize = "1G"

この場合、アップロードできるファイルサイズの上限は128MBとなります。

memory_limit = "128MB"
post_max_size = "1G"
upload_max_filesize = "1G"

この場合でも同様。

もちろん、memory_limitは、サーバのメモリサイズ(仮想メモリ含む)の上限を超えることはできません。

つまり、

memory_limit = "2G"
post_max_size = "2G"
upload_max_filesize = "2G"

こう設定したとしても、実際のサーバのメモリ(+仮想メモリ)が1GB分しかなければ、1GBまでしかアップできないということになります。(他にもメモリ使ってるだろうから実際はもっと低い)

では、サーバのメモリを12GBくらい積んで

memory_limit = "4G"
post_max_size = "4G"
upload_max_filesize = "4G"

とした場合、4GBまでアップロードできるようになるか?

答えはNoです。

この原因は、apacheにあります。

apacheの設定に、「LimitRequestBody」というものがあり、これの上限は2GBとなっています。

「LimitRequestBody」はその名の通り、HTTPリクエストのボディ部分のサイズ限界です。

いくらPHP側の設定で、2GB以上を迎え入れる準備をしたところで、HTTPリクエストの方で限界を迎えるわけです。

まあ、2GB以上をアップすることは中々ないとは思いますが、大容量のファイル共有サイトなどを作ろうと思ったりした場合は、注意が必要ですね。(FTP接続の方式にすればうまくいくかも。)

 

参考サイト

総合管理者 | 2015年10月16日 | コメント(0) | トラックバック(0) | PHP関連

bloginfoが非推奨?【WordPress】

今更ながら、bloginfoで一部パラメータの使用が非推奨になっているのに教えてもらって気付きました。

ただ、全部がアウトというわけではなく、Codexを見る限り非推奨になっているパラメータは

  • 'siteurl'
  • 'home'

の2つ。

代わりは

  • echo site_url()
  • echo home_url()

です。(どちらも返り値があるタイプなので出力する場合は要echo)

ちなみに、非推奨になったのは2.2のときみたい(結構前だな)

非推奨とはいえ、一応現在(version4.2.4)でも使用できています。

こういう場合の対策として、基本的に関数はさらにラッピングしといて、functions.phpだけ修正すればOKみたいにしておくべきだろうか・・・

それも面倒だなぁ。

 

参照サイト

総合管理者 | 2015年08月18日 | コメント(0) | トラックバック(0) | CMS関連

ゾーン設定の更新でエラー

Doレジでゾーン設定の更新の更新を行おうとしたところ、下記のエラーが出てしまいました。

[filepath]:XX: file does not end with newline
zone XXXXX.XXX/IN: loaded serial 1508171633
OK

XXは、設定によって変わります。

コピーしたものにドメインを追加し、Serialを変えただけなのに何でかな~と思ったら、案外簡単なところで引っかかってました。

最後の行は空行にしなくてはならないみたいです。

○正解

XXX   IN    A    XXX.XXX.XXX.XXX
MAIL        IN    A    XXX.XXX.XXX.XXX
(空行)

×間違い

XXX   IN    A    XXX.XXX.XXX.XXX
MAIL        IN    A    XXX.XXX.XXX.XXX(ここで終わっている)

 

総合管理者 | 2015年08月17日 | コメント(0) | トラックバック(0) | サーバー関連

Google Chromeでチェックボックスが表示されない

Google Chromeで、なぜがチェックボックスが表示されない現象発生したのでメモ。

原因はスタイルに

-webkit-appearance: none;

が記述されていたから。

これを消したら、表示されました。

 

参考サイト

chromeでチェックボックスが表示されない :: concrete5 Japan 日本語公式サイト

総合管理者 | 2015年07月30日 | コメント(0) | トラックバック(0) | CSS関連

メニューをカスタマイズ(WordPress)

WordPressの外観>メニューで作ったメニューは、wp_nav_menu関数で簡単出力されます。

階層も反映されてて便利なのですが、どうしてもこの関数は実現できないことが発生したため、独自に関数を作ることにしました。

メニューをデータを取得するには、wp_get_nav_menu_itemsを使用して配列で取得します。

ただし階層構造にはなってません。

なので、以前の記事「WordPressのサイトマップを作る【プラグインなし】」を参考に、階層構造で作り直して出力します。


function my_wp_nav_menu($menu_type, $menu_item_parent = 0, $ul_use_flag = 0){
	
	$return = "";
	$menu_items = wp_get_nav_menu_items('main_navi');
	$menu_trees = array();
	
	if($menu_items){
		$exist_flag = 0;
		foreach($menu_items as $menu_item){
			
			//親が引数($menu_item_parent)と同じもののみ
			if($menu_item_parent == $menu_item->menu_item_parent){
				if($exist_flag == 0){
					if($ul_use_flag == 1) $return .= '<ul class="sub-menu">'."\r\n";
					$exist_flag = 1;
				}
				
				//リンクの開き方
				$target = '';
				if($menu_item->target){
					$target = 'target="_blank"';
				}
				
				//class
				$class = 'menu-item';
				if($menu_item->classes[0]){
					$class .= ' '.implode(" ", $menu_item->classes);
				}
				
				//title要素
				$attr_title = '';
				if($menu_item->attr_title){
					$attr_title = 'title="'.$menu_item->attr_title.'"';
				}
				
				$return .= '<li class="'.$class.'"><a href="'.$menu_item->url.'" '.$target.' '.$attr_title.'>'.$menu_item->title."</a>";
				
				$return .= my_wp_nav_menu($menu_type, $menu_item->ID, 1);
				
				$return .= '</li>'."\r\n";
			}
		}
		if($exist_flag == 1){
			if($ul_use_flag == 1) $return .= '</ul>'."\r\n";
		}
	}
	
	return $return;
}

使用する場合は以下の通り

<ul>
	<?php echo my_wp_nav_menu('main_navi'); ?>
</ul>

これで大体wp_nav_menu関数の標準設定と同じ挙動となります。

再帰のたびに、wp_get_nav_menu_itemsで全部取りなおすので、あんまり効率は良くないですが、とりあえずこれで改造し放題です。

総合管理者 | 2015年07月08日 | コメント(0) | トラックバック(0) | CMS関連 | PHP関連

投稿件数が0件の時、archive.phpでpost_typeを取得する方法

投稿件数が0件のカスタム投稿ページを開いた場合、archive.phpでは、get_post_type()の返り値がfalseとなり、post_typeが取得できません。

その場合は、

get_query_var('post_type')

で取得できるようになります。

こういうケースは結構あるので、get_post_type()ではなくこっちで取得するようにしたほうが良いですね。

 

参考サイト

総合管理者 | 2015年07月02日 | コメント(0) | トラックバック(0) | CMS関連

Facebook Developersでアプリを登録する。

以前使用していた時から結構インターフェースが変わったので、改めて登録方法。

https://developers.facebook.com/

にアクセスします。

WS001094

上のメニューから「My Apps」を選択します。

 

WS001095

登録済みのアプリ一覧が表示されます。

右上の「Add a New App」ボタンをクリックします。

 

WS001096

どのアプリを作るか選択します。
今回はPage Plugin用のアプリを作りたいので、ウェブサイトを選択します。

 

WS001097

アプリ名を入力します。

アプリ名を入力すると、下図のようになります。

WS001098

Create New Facebook App IDボタンをクリックします。

 

WS001099

カテゴリを選択して、右下の「Create App ID」ボタンをクリックします。

 

下図のような画面になります。

WS001108

少し下に行くと、Tell us about your websiteというフィールドがあります。

WS001100

Site URL と Mobile Site URLを入力し、Nextボタンをクリックします。

 

下図のような画面になります。

WS001101

さらに下へスクロールするとフィニッシュです。

 

さて、このままでは、まだアプリとしては非公開状態です。

Page Pluginのコード取得時に、このアプリを選択しても

This app is in Development Mode and not available publicly.
公開モード can be enabled in the App Dashboard.

というエラーメッセージが表示されてしまいます。

公開状態にするには、まずメニューからMy Appsを選択し、登録されているアプリ一覧を表示します。

WS001109

新規登録したアプリを選択します。

WS001110

左メニューからSettingsを選択します。

WS001111

「Basic」タブブロックの右下にある「Contact Email」にメールアドレスを入力し、「Save Changes」ボタンをクリックします。

 

左メニューの「Status & Review」を選択します。

WS001112

上図の赤枠部分をクリックし、Yesにします。

クリックすると、下図のようにメッセージが表示されるので、承認をクリックします。

WS001113

以上で、公開状態となり、使用できるようになります。

総合管理者 | 2015年04月30日 | コメント(0) | トラックバック(0) | API関連 | アプリ関連

Like Boxもうすぐ終了 Page Pluginへ乗り換え

FacebookのLike Boxも、もうすぐ終了するそうです。

FacebookのLike Boxは2015年6月23日で終了。Page Pluginに変わります

代わりに提供されている「Page Plugin」へ乗り換えます。

https://developers.facebook.com/docs/plugins/page-plugin

へアクセス。

下図のブロックで

WS001107

  • Facebook Page URL
  • Width
  • Height
  • Hide Cover Photo
  • Show Page Posts
  • Show Friend's Faces

を設定します。

最後にGet Codeボタンをクリックして、コードを取得します。

WS001106

ほぼLikeboxの時と変わりませんが、問題点として、

  • Widthの最小値(280px)および最大値(500px)が決まっている。
  • Heightの最小値が決まっている。

という点があります。

特にWidthの最小値・最大値が決まっているのは痛いです。

サイドバーに持ってくるにも、メインブロックに持ってくるにも何とも半端でどうしたものか。

このあたりのサイズが最近の流行なんですかね?

 

追記

あれ?この記事読み返してたら、いいね!も昔のコード使えなくなるみたいじゃん。

FacebookのLike Boxは2015年6月23日で終了。Page Pluginに変わります

マジかよ・・・

総合管理者 | 2015年04月30日 | コメント(0) | トラックバック(0) | API関連 | SNS関連

RSS Graffiti本日終了 dlvr.itへ乗り換え

WordPressやMovable Type、なんでもいいのですがRSSが出力できれば、それを元にFacebookへ投稿できる「RSS Graffiti」が本日、2015年4月30日をもって終了するそうです。

ということで、急いで乗り換え。

色々候補は有ったのですが、最終的に「dlvr.it」を使うことにしました。

https://dlvr.it/

まずは、アカウントを作成します。

WS001093

右にある「Sign up」ボタンをクリックして、アカウントを作成してください。
FacebookやTwitterアカウントを持っている場合は、それでもログイン可能です。

アカウント作成、またはログインが成功すると、下図の画面になります。
How would you like to start sharing content?

WS001077

左の「Start Feeding」ボタンをクリックします。

 

WS001078

左の「Source」にフィードのURLを入力します。
Your blog or other website URLと書いてますがフィードのURLです。
例:http://www.nandani.sakura.ne.jp/feed

ラジオボタンでは、次からの投稿を反映させたい場合は、「Wait until a new item is posted.」を選択してください。

URLの入力が成功すると、自動的に正常なURLかどうかを判断して、右の「Choose a Destination」のボタンを選択できるようになります。

今回はFacebookへの投稿なので、Facebookボタンをクリックします。

Facebookログイン画面がポップアップウィンドウで開きますので、Facebookへログインしてください。(すでにFacebookへログインしている場合は、次へ)

一番最初の登録の場合、dlvr.itからFacebookへのアクセスを許可してよいかという画面が開きますが、許可していってください。

最終的に下図の画面になります。

WS001079

プルダウンで、どのタイムラインに投稿するかを選択してください。
Facebookページの権限を持っている場合は、それも選択可能です。
プルダウンを選択したら「Continue」ボタンをクリックしてください。

 

最後の画面になります。

WS001080

右下の「Done」を選択してください。

登録が成功すると、下図のメッセージが開きます。

WS001081

以上が最初の登録です。

 

2回目以降の新規登録

2回目以降の新規登録は左上の「+ Add Route」ボタンから登録します。

WS001082

微妙にインターフェースが変わりますが、やることはほぼ同じです。

 

WS001083

左の「Source」の「+ Add」ボタンをクリックします。

 

WS001084

フィードボタンをクリックします。

 

WS001085

Feed URLを入力し、どのタイミングからタイムラインに投稿するかをプルダウンで選択します。

「save source」ボタンをクリックします。

 

WS001086

続いて右の「Destinations」の「+Add」ボタンをクリックします。

 

WS001087

「Facebook」ボタンをクリックします。

 

WS001088

「Connect to Facebook」ボタンをクリックします。

 

WS001089

※ログイン中の場合は、自動的にログインしているFacebookのアカウントで上記の画面となります。

プルダウンで投稿先タイムラインを選択し、「Continue」ボタンをクリックします。

 

最後に「Save」します。

 

同じタイムラインに複数のフィードを登録する場合

同じタイムラインに複数フィードを登録する場合は、すでに登録済みの「Source」の「+Add」から片側のみを登録します。

WS001090

複数登録されるとこんな感じになります。

 

WS001092

総合管理者 | 2015年04月30日 | コメント(0) | トラックバック(0) | API関連 | SNS関連

キーボードの入力モードが違う・・・!

たまにお客様のPCで作業をする際、かな入力モードになっていたり、NumLockがかかっていたりすることがあります。

自分のPCではローマ字(または英数字)入力固定なので、こんな時どうすればいいか固まってしまうことがあります。

ということで、切り替え方法。

  • かな入力とローマ字切り替えを行う場合は、
    Alt + カタカナ・ひらがな・ローマ字 キー
    で切り替えることができます。
  • NumLockがかかっている場合(mキーが0になったりする場合)は、右上くらいにあるはずのNumLk(NumLock)キーを押すことによって元に戻ります。

総合管理者 | 2015年04月17日 | コメント(0) | トラックバック(0) | OS関連

Copyright(c) 2010 - 2017 ダリの雑記