Study-Daily
PHPのファイルアップロードについて
PHPで大きなファイルアップロードを作成する
・Webサーバー側でBody Max Lengthの指定で大きなサイズを指定しておきましょう。
・formのhtmlでenc-typeの指定はもちろん、hiddenでMaxFileSizeの値の指定、その後にinput file
・phpの設定でmax_file_size,post_max_size,タイムアウト、memory_limitなどの設定が必要
・Apacheのバージョンが古いと2だか4GBが上限。という噂。
・サーバーが32bitだとメモリを3.7GB?くらいまでしか扱えないらしいから5GBクラスの巨大ファイルはアップロード無理だと思われる。
Vagrant、最終的にはEC2にAnsibleでWordPressを構築を試みる2
・botoが使えないってエラーになる。
→次のURLで解決 https://groups.google.com/forum/#!topic/ansible-project/ftlmfIC1DHk
つまり、ansibleがなぜか現在動いているバージョンのライブラリを参照出来ないっぽいのでこれまたなぜか
hostsにどこのpythonを使っているのか書いてあげる必要があったということ。なぜansible.cfgではないのか
・契約アカウント?で試してたらCredentialエラーが出てて、試しにIAMアカウント作成してそのIAMアカウントを
使ったら成功した。なんで?
・ApacheのVHOSTのRootディレクトリが700だったので403エラーで表示されなかった。755に変更して解決。
・VirtualHostの設定を行う場合、どこかに「NameVirtualHost」の記述が必要。
というより、NameVirtualHostの記述内容とその後のVirtualHostディレクティブの内容に整合性がないといけない。
なので「NameVirtuakHost *:80」の記述があれば、その後<virtualhost *:80>VirtualHostディレクティブが
ないといけない。
もしも<virtualhost {{hostname}}:80>みたいな記述をしていた場合、NameVirtualHost {{hostname}}:80の宣言もないといけない。
整合性が撮れてないと、宣言が足りないとかそんなVirtualHostディレクティブはないとか警告が出る。
・Ubuntuに入ってるApache2のVirtualHostの有効化無効化
sites-availableディレクトリにVirtualHost設定書く
a2ensite {{vhost_filename}} で有効化、a2dissite {{vhost_filename}} で無効化
・Hostの指定が足りない!?
Could not reliably determine the server’s fully qualified domain name, using for ServerName
こんなエラーが出る。hostsファイルに127.0.1.1 にhogehoge.localを追記してあげたら直った
つまり、hostsファイルにhostnameが127.0.1.1で定義されている場合、Apacheが名前解決のエラー出すので、
そこに{{hostname}}.localを追記する処理追加
・Ansible用MySQLの設定追加
Ansibleでmysql_userモジュールを使ってユーザーを追加する際に、MySQLが外部サーバーの場合は(Webサーバーから接続用ユーザーの作成の場合は)
host=%,host=localhostの記述が必要、同時に作れるのか試してない。自分は別のtaskとしてそれぞれ実行(同じユーザー名で別hostのユーザーを2回作成)
リモートユーザーにあたる側(今回はWebサーバー側)にはmysql_clientのインストールが必要
Vagrant、最終的にはEC2にAnsibleでWordPressを構築を試みる
Ansibleに興味があって試そうとして、対象のサーバーをまずはVagrantを使おう、最終的にはEC2を使う形まで持って行こう。という企画です。アプリとしてはAnsibleのチュートリアルに出てきたのでWordPressを構築するのを試します。
の、前にAWSのS3試したので。
・IAMでアカウント作ってセキュリティポリシーでS3の接続出来るバケット制限したり、操作権限制限したり出来る
・Pythonのbotoを入れて最初S3の操作しようと思ったけど、マルチパートアップロードのやり方が分からなくて挫折
・AWS-CLIが楽ちん、S3に対して勝手にマルチパートアップロードしてくれる。でもWindowsで扱う場合、お決まりの文字コード警告がでますね。
・PHPのSDKでS3に対するファイルのリスト取得、ダウンロード、アップロード(マルチパートアップロード)を作成。思ってたより簡単。
Ansible試す
・Vagrantで作成したboxにAnsibleでSSHに接続する場合、SSHの設定をansible.cfgにpathを書いていない場合、デフォルトの~/.ssh/configを参照してしまう。
・Ansibleはインベントリファイルに書いた名前でSSHする。だからSSHの設定ファイルのHost名は合わせる
・AnsibleのDocument(英語)である程度分かるんですが、ansible-docコマンドで、ある程度何が出来るか雰囲気だけ分かる。
・Ansibleで指定するモジュールはユーザーを作るadd、ファイルを転送するcopy、shellを実行するshell、ファイルを実行?するcommand、aptやyumあたりがよく使うモジュール、設定ファイルで編集が1行で済む場合はlineinfile、結構いろいろある場合は完成版の設定ファイルをcopyするかJinja2で作成したtemplateファイルを使う
・Ansibleのnotifyで呼び出されるのは同じRoleのhandlerに登録されたYamlのnotifyで指定した値と同じnameのものが処理されるようだ
以下WordPressでApacheとMySQLを別サーバーにする場合に忘れず行いましょう的なMySQLに関する事
・AnsibleでlocalhostだけじゃなくてWebサーバー側のIPのも作成しましょう
・Ansibleでmy.cnfでbind_addressでWebサーバーから接続できるようループバックからIPに変更する
PHPあべし!
最近PHP触ってて「あべし!」ってなった事。
PHP5.5でempty()の仕様が若干変わっているから注意。他人がPHP5.5で作成したものが自分の開発環境のPHP5.4だとエラーになるから調べてたら。php.netに書いてあった。ついでにPHP5.5で追加された関数とか増えてるの気づいた。
愚痴、FuelPHPのファイルとクラスの命名規則の関係はどうにかならないものか。
低レベルプログラマだからJavaScriptで知らなかった事
JavaScriptで知らないせいでハマったところなどなど
Chromeで確認した時に動いたせいで気付かなかったんだけど、イベントトリガの関数定義で引数にeventオブジェクトを明示して渡さないとIE系では正しく動かない。これはChromeが異常なのかも。
そらそうだという話なんですが、フォームの値は基本テキスト型だからJSで数字として扱って計算したい場合は数字型に変換が必要。そうしないと足し算しようとしたのに文字列連結になってしまう。
JS数字計算で2進数から10進数への変換誤差がでて死ぬる。
100+10.1とかやろうとすると物凄い小さい数字が誤差として丸められず残る。
最近やったいろいろ
最近やったいろいろな作業。こまかく書くのめんどいから一つにまとめちゃった。
◆PostgreSQLのSQLダンプ
・sqlダンプコマンドして移行先で復旧コマンドで取り込み。楽ちん!
◆残念VBSバッチスクリプト
・サーバーのローカルでEscキーを送信するバッチ処理作ったけど、リモート等で開いてないと正常に動作しない
・windowsのコマンドでディレクトリ削除するコマンド
◆謎!IISの設定
・IISのRewrite設定
直接変更すると適用されない場合がある?わかりにくいGUIからRewrite設定
・DefaultWebSiteは外部からの通信を遮断して、仮想サイトだけが外部からのリクエストを受付け、
DefaultWebSiteにリダイレクトするやり方がある。
・IISの接続数制限はユーザー単位ではなく、リクエスト単位なので1ブラウザ6リクエスト位使うため、6の倍数で設定しないと、意図した制御に出来ない
◆Win8.1
・スタートパネルの左下にひっそりとアプリ一覧に移動するアイコンが。
・デスクトップやスタートパネルからwin+fで検索してもアプリ出てこない。
・win8でSQLServer2012のodbc設定がうまくいかない
解決していない。接続先サーバーが選択できない。何か設定が足りてないのかも
◆PHP
・古いやり方のPHP(PEAR使ってる)のinclude設定。ホントめんどい。
・PHPで頼りになるのはやはりPHP.net
・問い合せフォームやるとバランスよく覚える気がする(Javascript、css、php)。
確認レイアウトを制御phpが適宜incudeするやり方はスマートかもしれない。
※セッション制御が楽かも
・メール送信は確実なのはqdmail&qdsmtpなんだけど、遅い。
・メール送信はPHP5.3以降でiconvモジュールが無効になっていないならZendでいいやろ
※まさかのiconvモジュールが無効になっていると関連ライブラリでエラー出てZendMail使えない
・php5.4以降はセーフモード使えない
・システムレベルの操作を行う関数に影響が出るのでcgiで動かしましょう。
・ファイルのオーナーとかに気をつけましょう
◆Apacheの設定
・SSLのヴァーチャルホスト設定する時には証明書のパスを書く
・ReWriteEngineの書き方、.htaccessにリダイレクトの設定書こうとしたけど、うまくいかなくて
vhost.confの方に書いた
◆SSH
・SSHで認証鍵ファイルを使う場合の設定方法
ローカルで認証鍵を作成して、公開鍵をサーバーのSSHログインアカウントの~/.ssh/に放り込む
・~/.ssh/に設定ファイルを置いておくと楽
◆ポートフォワーディング
・1つ目のsshがリモートサーバーに対して22ポートで接続するが別のサーバーに任意のポートを転送する設定、
転送するポートは22じゃなくても良いので、3389転送してRDPとか出来る。
◆忘れちゃうからメモ(Linuxコマンド)
・scp
scp sourcefile remotehost target
◆emacs
・ssh→sudo or su root する方法
Win上のpythonでバッチ処理3
windows server2008上のFileMakerServerのバッチ処理を行うにあたり、作業用csvファイルから動的データを
取得し、コマンドを叩く。
Win上のPythonでバッチ処理2
windows server2008上のFileMakerServerのバッチ処理を行うにあたり、前回使用した作業用の
csvファイルが存在していたら消す処理。
Windows上でpythonでバッチ処理1
windows server2008上のFileMakerServerのWeb公開エンジンのプロセスを監視して
異常終了していたらプロセスを再起動するバッチプログラムをpythonで書いてみた。
2014年の目標達成進捗管理的な
新年、明けましておめでとうございました。良いお年を。
今回は、プログラムの勉強のために作成して使っているVM(Ubuntu)にredmineを動かす。という話。
事の発端は新年に目標を掲げるのは意味がない。なぜならば年が改まるとかそういうタイミングでしか掲げられないような目標は普段から取り組めない達成できない目標だから。
とか、意志薄弱な人間は日が経てば目標自体忘れて結果達成できない。とか、変にハードルの高い目標にしてしまって達成できなくて早々に諦めてしまうとか。
そういう話を聞いたので、ならば達成出来るように達成可能と思えるような目標をredmineでマイルストーンをチケットとして分解して期日を設定して進捗管理するのはどうだろうかと考えた。
要は2014年の目標はredmineで適当な目標の進捗管理を行い、その目標を達成できるよう行動する。のが目標。
という事で設定作業開始
環境:
- ホストOS:OS X10.9
- ゲストOS(今回使用する環境):Ubuntu13.10 32bit(ずっと64bitいれたと思っていた(T_T))
- nginx1.4.1(以前から使用していて今回はredmine向けに設定を変更します)
- ruby2.0.0dev(rbenv)
- unicorn4.7.0
- rails3.2.16
- redmine2.4.2
rbenvにruby2.0を追加してデフォルトにする
rbenvは元から入れていたので、今回は2.0を追加する作業だけ。折角だから最新を使おうってだけ。
参考:rbenvを利用して複数バージョンのRubyをインストール
※自分の環境ではrehashのみ、フルパス指定じゃないとエラーになる。なんでだろう。
rehashの時だけsh-rehashがうんたらってエラーになる。
ruby2.0の状態でgem update でアップデートしてbundler入れる。
MySQL側の準備
redmienユーザーの作成と