今更一から勉強しよう

勉強のノート。

Windows7、IIS環境で、PHPでファイルUPLOADする

  • PHPのインストール及び設定
  • IISの設定
  • PHPの製造

PHPのインストール及び設定

  • PHPインストール
  • PHP設定

参考 (https://www.phpbook.jp/tutorial/)

PHPインストール

  1. 画面右7.2.2を選択
  2. Windows downloads」と書かれたリンクをクリック
  3. 使うものをクリック  IISの場合はNon Thread Safe  Apacheの場合はThread Safe
  4. 解凍する(インストールキットは無い) 今回はNon Thread Safe。

(http://www.php.net/)

PHP設定

参考 (http://create-something.hatenadiary.jp/entry/2014/06/11/194808)

  1. PATHにPHPのインストールしたフォルダを追加
  2. コマンドを打って確認

    php -r "echo 'hello';"

  3. INIファイルを作成 雛形を利用

    php.ini-development 開発環境用雛形 php.ini-production 実行環境用雛形 今回はphp.ini-developmentをコピーしてphp.iniを作成

  4. php.iniの以下の項目のコメントを削除して有効にする

    fastcgi.impersonate = 1 fastcgi.logging = 0 cgi.fix_pathinfo = 1 cgi.force_redirect = 0

  5. 展開したフォルダ内のphp-cgi.exeを実行し、エラーが出ないことを確認する。 CTR + Cで終わる。

IISの設定

  • 機能の追加
  • PHPフォルダアクセス権限設定
  • PHPランタイム登録

参考 (http://d.hatena.ne.jp/diveintounlimit/20091213/1260714351)

機能の追加

  1. Windowsの機能の有効化

インターネットインフォメーションサービス⇒World Wide Webサービス⇒アプリケーション開発機能⇒CGIにチェック

インターネットインフォメーションサービス⇒World Wide Webサービス⇒HTTP共通機能にチェック

PHPフォルダアクセス権限設定

  1. PHPのフォルダのプロパティーを開く。
  2. [セキュリティ] タブの [編集] をクリックする。
  3. [追加] をクリックする。
  4. 場所の指定をコンピュータに設定し、オブジェクト名にiis_iusrsと入力して [名前の確認] をクリックする。
  5. 選択するオブジェクト名が認識されたら、[OK] をクリックする。
  6. アクセス許可は特に変更せず、[OK] をクリックする。

PHPランタイム登録

  1. IISマネージャのハンドラーマッピングをクリック。
  2. モジュールマップの追加をクリック。
  3. 以下を入力 要求パス:*.php モジュール:FastCgiModule 実行可能ファイル:{インストールフォルダ}\php-cgi.exe 名前:PHP_via_FastCGI
  4. [要求の制限] ボタンをクリックする。
  5. [要求のマップ先が次の場合のみハンドラーを呼び出す] にチェック
  6. [ファイルまたはフォルダー] を選択して [OK] をクリックする。
  7. [OK] をクリックする。
  8. [はい]をクリックする。
  9. サンプルテスト C:\inetpub\wwwroot\info.phpファイルを作成。 <?php phpinfo(); ?>を追記。 http://localhost/info.php にアクセス

PHPの製造

製造

  1. アップロード用画面を作成 upload.phpをwwwrootに作成

    <!DOCTYPE html> <html lang = “ja”> <form enctype="multipart/form-data" action="result.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> このファイルをアップロード: <input name="userfile" type="file" /> <input type="submit" value="ファイルを送信" /> </form>

  2. ファイルコピー用PHPを作成 result.phpをwwwrootに作成

    <!DOCTYPE html> <html lang = “ja”> <head> <meta charset = “UFT-8”> <title>フォームからデータを受け取る</title> </head> <body> <?php $target_dir = "uploadFiles/"; if(!file_exists($target_dir)) { mkdir($target_dir, 0777, true); } $target_dir = $target_dir . "/" . basename($_FILES["userfile"]["name"]); //ファイルができているか(アップロードされているか)チェック if(is_uploaded_file($_FILES['userfile']['tmp_name'])){ //ファイルを保存ファイルにコピーできたか if(move_uploaded_file($_FILES['userfile']['tmp_name'],$target_dir)){ //正常 echo "uploaded"; }else{ //コピーに失敗(だいたい、ディレクトリがないか、パーミッションエラー) echo "error while saving."; } }else{ //そもそもファイルが来ていない。 echo "file not uploaded."; } ?> </form> </body>

動作

http://localhost/upload.php

メモ

  • phpinfo()・・・「php.ini」ファイルに変更を加えたあとで「phpinfo」関数によって出力された値を確認すれば、変更した内容がきちんと反映されているのかどうかを確認することができます。
  • IISphp.iniの設定を反映する方法・・・アプリケーションプールでリサイクル
  • wwwrootの権限付与でなぜかうまくいかずにはまった