Linuxでファイルの中に記述さている文字列を検索する方法

Linuxでファイルの中に記述されている文字列の検索方法です。(タイトルのまま)

まずはTeraTermなどで、サーバにSSH接続してください。

検索したいフォルダまで移動してください。

下記のコマンドを実行してください。

find ./ -type f -name "*.(拡張子)" -print | xargs grep '(検索ワード)'

  • -name "*.(拡張子)":
    特定の拡張子のファイルのみを対象としたい場合は、拡張子も入力してください。
  • grep '(検索ワード)':
    検索したい文字列を入力してください。

例:PHPファイルの中身にhogeが記述されているファイルを検索。

find ./ -type f -name "*.php" -print | xargs grep 'hoge'

 

参考サイト

 

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

WordPressの見落としがちな設定(ゴミ箱)

お客様から、記事が勝手に消えてしまったという連絡を受けました。

話をよく聞いてみると、とりあえず非公開にしたいからゴミ箱に移動させていたとのこと。

いや、そういう時はステータスを「下書き」にするか、公開状態を「非公開」にしてほしいのですが・・・

うっかり「完全に削除する」をクリックしてしまったのではないかと思ったのですが、よくよく調べてみると、Wordpressではゴミ箱に移動した記事は、30日経つと自動的に消えてしまうそうな。

これは知らなかった。

ちなみに、wp-config.phpに

define('EMPTY_TRASH_DAYS', 日数);

と追記することで、保存期間は設定できるらしい。

WordPressでゴミ箱から復元する方法と保存期間を変更する方法 | WordPress奮闘記

とりあえずゴミ箱には、消えても良い記事だけを入れましょう。

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

リバースプロキシ超便利!(専用サーバに限る)

日進月歩のWEB業界。

次々に新しい技術が出てきて、めまぐるしい限りです。

どこまでついていけることやら。

しかしふと後ろを見てみると、結構取りこぼしている知識ありませんか?

ということで、最近知ったリバースプロキシについて。

 

このような事例があったとします。

とある会社で、サーバを移転し、ウェブサイトを一新することになりました。

しかし、その会社は多くの店舗をもっており、しかも店舗ごとにウェブサイトを持っています。

しかし、ドメインは1つで

  • http://www.○○○○.co.jp

が本体のサイト。

各店舗のサイトが、

  • http://www.○○○○.co.jp/□□□□
  • http://www.○○○○.co.jp/△△△△
  • http://www.○○○○.co.jp/××××

フォルダ構造になっているのでした。

さて、本体サイトの準備は出来たのですぐにでも公開したい!

しかし、他の店舗のサイトはまだ出来ておらず、しかも移行が難しいコンテンツもある。

「はやくしてくれ。」

「いやいや待ってください。そもそも移行自体が難しいコンテンツもあるんです。」

という問答の末、

「早く公開したいから、とりあえず、会社本体サイトだけでも新サーバで公開してくれんか?」

と来てしまいました。

さて、こんなときどうするか。

こんなときこそリバースプロキシですよ!(ただし移行先が専用サーバに限る。)

 

STEP.1

まず、元々のサーバ用に、サブドメインを取得し、割り当てておきます。

http://hoge.○○○○.co.jp/

 

STEP.2

新サーバのhttpd.confを開き、

<VirtualHost *:80>
ServerName www.○○○○.co.jp

</VirtualHost>

の中に、

ProxyPass 公開パス 転送先URL
ProxyPassReverse 公開パス 転送先URL

を追記します。

公開パスは、各店舗のフォルダです。

転送先URLは、サブドメインを割り当てた各店舗のURLです。

つまりこうなります。

ProxyPass /□□□□ http://hoge.○○○○.co.jp/□□□□
ProxyPassReverse /□□□□ http://hoge.○○○○.co.jp/□□□□

ProxyPass /△△△△ http://hoge.○○○○.co.jp/△△△△
ProxyPassReverse /△△△△ http://hoge.○○○○.co.jp/△△△△

ProxyPass /×××× http://hoge.○○○○.co.jp/××××
ProxyPassReverse /×××× http://hoge.○○○○.co.jp/××××

 

STEP.3

追記後はApacheを再起動して、DNSを切り替えます。(あらかじめhostsファイルを編集して、DNS切り替え後の状態を確認しておくと良いでしょう。)

 

これで、本体サイトは新サーバで稼動し、各店舗のサイトは旧サーバへ転送されます。

これがただの転送ならば、URLがサブドメインになってしまいますが、リバースプロキシならば、ドメインが「www.○○○○.co.jp」のまま、旧サーバのページを開きます。

 

う~ん、便利だ。

 

参考サイト

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

あぁ勘違い ー パーミッションについて

自分はこれまで、パーミッションについて

  • 実行:4
  • 書き込み:2
  • 読み込み:1

だと思っていました。

だって、PHPは644(または604)で動くんだもの。

実行権限がついているのは当然でしょ、と思っていたわけです。

しかし実際は皆さんもご存知の通り

  • 読み込み:4
  • 書き込み:2
  • 実行:1

と間逆!

ドヤ顔で説明していたところに、違いますと指摘されたものだからこれは恥ずかしい・・・

では、なぜPHPは644(または604)で動作するのか。

答えはこのブログに書かれていました。

PHPでパーミッション(実行権)の設定が必要ない理由 | ちほちゅう

なるほど、PHPはapacheモジュールで、apache内で実行されるから、apacheが読み込みさえできれば動作するということですね。

・・・でも待てよ。

PHPにはCGIモードなるものもあったはず。

PerlなどのCGIは755・705で動作するから、CGIモードだと755・705か?

いやしかし、運用している専用サーバのPHPはCGIモードにしていて、644で動いていたはず。

・・・そういえば。

と、専用サーバを設定する際に、suEXECという設定を行ったことを思い出しました。

suEXEC サポート - Apache HTTP サーバ

[引用]
suEXEC 機能により、Apache ユーザは Web サーバを実行しているユーザ ID とは 異なるユーザ ID で CGI プログラムや SSI プログラムを実行することができます。CGI プログラムまたは SSI プログラムを実行する場合、通常は web サーバと同じユーザで実行されます。

なるほど、だからか。

所有者権限の実行でありながら、CGIプログラムを実行することが出来るわけですね。

だから所有者が読み込みさえできればよいと。

 

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

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関連

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