2011年6月26日日曜日

PHPで写真共有サイト構築 -5 写真ダウンロード

最後は写真ダウンロード処理。

実はこれはまだ途中。
本当はダウンロードボタンを押した際にプログレスバーを表示したいが、その対応はまだ・・・。

ま、とりあえず今回の対応のポイントは1つ。

  1. systemコマンドでファイルを圧縮してダウンロード
systemコマンドでファイルを圧縮するために、圧縮元のファイルと圧縮後のファイル名を引数で取得。
//ダウンロードするファイル
$selectFiles = $_POST["selectFiles"];
$zipFile = $_POST["zipFile"];

// zipファイル文字列作成
$fileCnt = count($selectFiles);
for($i=0; $i<$fileCnt; $i++){
  $zipFiles .= $selectFiles[$i];
  $zipFiles .= " ";
}
あとはそれをもとにsystemコマンドを発行。
// 圧縮
$re = system("zip -r $zipFile $zipFiles");
これだけで複数ファイルのダウンロード可能。
まー、プログレスバー出したりいろいろ使い勝手よくする方法はあるとおもうけど、
とりあえずやりたいことはこれで完成!!

PHPで写真共有サイト構築 -4 写真アップ表示

今回はthumbnail画像をクリックした際の実際のimage用(target)写真の表示。

実は前回のList表示のソースで以下のように画像クリック時にimgview.phpという処理を呼び出すようにしていた。その処理。
echo "";
  echo "";
thumbnail画像をクリックしてやりたいことは、

  • target画像(大きい画像)の表示
  • List表示時の前後のファイルへの移動
で、ポイントは
  1. target写真のパスと、image用写真ディレクトリパスを引数で受け取る
  2. image用写真ディレクトリパスから全ファイルを取得し、mageファイルをソート順で取得
  3. 2で取得した情報とtarget写真パスで、target写真の前後の写真パスを取得
まず、1のパスの取得は今まで通り取得し2のファイルソートも前回のList表示時のソート処理と同様に取得。
 read())){
  //ファイル名配列に順に入れていく
  array_push($array_file, $file_name);
}
sort($array_file);
$ch_dir -> close();
つづいて3のtargetの前後写真のパス取得は、以下のような簡単なロジック。
$getFlg = FALSE;
//ディレクトリ内の画像を一覧表示
foreach ($array_file as $key => $val) {
  $file_name = $val;
  if ($file_name !== "." && $file_name !== "..") {
    $image_path = $dir_path .$file_name;

//    echo $image_path ."
";
    if ($getFlg) {
      $next_file = $image_path;
      break;
    }
    if ($target_file == $image_path) {
      $getFlg = TRUE;
    }
    if (!$getFlg) {
      $before_file = $image_path;
    }
  }
}
最後に、それらの情報を表示する。
if ($before_file){
  echo "前の写真";
}

//画像かどうか?
if (@getimagesize($target_file)){
  echo "";
}

if ($next_file){
  echo "次の写真";
}
ダウンロードボタンを作ってよかったけど、今回は画像Listからの一括ダウンロード処理を対応するようにしたので、ここにはなし。

ということで、次回は最後のファイルダウンロード処理。

2011年6月22日水曜日

RunRunRun

今日から毎日走ることに決めた嫁と俺。

往復で3キロぐらいを今日は走った。
体力つけるぞー!

CSS 基礎

CSS3を勉強する前にCSSの基礎。

書式とさまざまなセレクタ

◆基本書式

属性(プロパティ)

h1 { color : #ff0000;}
↑        ↑
セレクタ    値



◆セレクタ指定方法

-- 要素セレクタ --
   h1 {・・・}                h1要素

-- 子孫セレクタ --
    div img {・・・}          div要素の下の階層のimg要素

-- 属性セレクタ --
     p[id] {・・・}             id属性が指定されているp要素
     p[id="test"] {・・・}   id属性が"test"であるp要素
     p.class_test {・・・}    class属性が"class_test"であるp要素

-- idセレクタ --
     #id_test {・・・}         id属性がid_testである要素

-- クラスセレクタ --
     .class_test {・・・}      class属性がclass_testである要素

そのほか疑似クラスを使用する方法がある。

hover疑似クラス  div:hover {・・・}    div要素にマウスカーソルが置かれているときのプロパティ


などなど。

2011年6月21日火曜日

Rosetta Stone 来たー!!

今日、なけなしのボーナスをはたいて買ったRosettaStoneが来た!

買ったのはレベル1~5の英語のやつでいまだとボーナスキャンペーンで25%OFF。

RosettaStone ボーナスキャンペーン


以下パッケージ内容





今日からRosetta人になれるよう、こつこつやっていこ。
7がつからはノー残だし^^;

2011年6月20日月曜日

PHPで写真共有サイト構築 -3 ファイルリスト表示

今回はアップロードされたファイル一覧を表示する。

一覧表示するまえの画面からは写真アップされたDir(photoDir)が
渡される。

ディレクトリ構成としては、

photoDir/images

              /thumbs
以下ポイント。
  1. サムネイル画像ディレクトリ内のファイルを検索して取得
  2. ソート処理でファイル名をソート
  3. サムネイル画像クリック時にimages画像を表示できるようにリンクをつける
  4. cssのclear='left'で5枚ごとにサムネイルを改行

まず、1.のサムネイル画像ディレクトリのファイル検索方法。
PHPでディレクトリが存在するかどうかと読み込み可能かのチェックを行う。

それでOKならdir関数を使ってディレクトリクラスを取得する。

if (is_dir($thumbDir) and ($thumbDir != "/")) {
    if(is_readable($thumbDir)){// — ファイルが読み込み可能かどうか
      $ch_dir = dir($thumbDir); //ディレクトリクラス

つぎに2.のソート処理を行う。
あらかじめupload時に写真作成日時でファイル名を作成しているので、ソートすることで
時系列に一覧を表示できる。

ソート処理はarray関数で配列を作成し、そこにarray_push関数でファイル名を詰め込んだ後、
sort関数を呼び出せばOK。

// ソート処理
      $array_file = array();
      while (false !== ($file_name = $ch_dir -> read())){
        //ファイル名配列に順に入れていく
        array_push($array_file, $file_name);
      }
      sort($array_file);
      $ch_dir -> close();


後は4.ソートされたファイル名をもとにサムネイルを並べるとともに、
そこにリンクをはる。

またその際に、5.cssのclear='left'でサムネイル画像の回り込みを解除することで
改行するようにする。今回は5つ画像を表示すればが改行する。

//ディレクトリ内の画像を一覧表示
      foreach ($array_file as $key => $val) {
        $file_name = $val;
        $thumb_path = $thumbDir .$file_name;
        $image_path = $imageDir .$file_name;
        if (@getimagesize($thumb_path)){ //画像かどうか?
          echo "
"; echo ""; echo ""; echo ""; echo "
"; $cnt++; } if ($cnt>=5) { echo "
"; $cnt = 0; } }

これで一覧表示は完了!!

2011年6月19日日曜日

サプライズ

朝起きると嫁から父の日プレゼント。


毎回脅かされますなー。

幼稚園 下の子 授業参観

今日は幼稚園の授業参観。
先週は上の子の学校訪問があっての立て続け。

まわりのお父さんに聞いても同じ時期にあるみたいで、今はそういうシーズンらしい。


授業が始まるまでの粘土遊び。

お祈り。姿勢よし!


授業はお外での体操授業。


みんな先生の話をよく言い聞いて非常にお利口でした。


ちーなーみーに、最後は父の日ということでストラップもらいました。
さっそく装着!

がんばって授業を一生懸命受けている子に感動ー。

2011年6月18日土曜日

jQuery ajaxでXMLとかJSONとかJSONPとか取得 - 2

今回はJSONPの取得。

JSONP…scriptタグを使用してクロスドメインなデータを取得する仕組み。

通常ブラウザなどに実装されている「同一生成元ポリシー(SOP)」という制約により、 Webページは自分で生成したドメイン以外のドメインのサーバと通信することはできない。

じゃどうするか、というとサーバ側ではまず

  1. 読み込ませたいJSONデータを任意の関数の引数として定義
  2. そのデータをxxx.jsonpみないにファイルに保存
を行う。
一方の呼び出し側では

  1. javascriptタグのsrcにxxx.jsonpを指定
  2. サーバ側の任意の関数を定義

する。

そうすることで呼び出し側からは、SOPの制約に引っかかることなくデータを取得できるようになる。

ではこれをjQueryをつかったら~、ということで以下ソースなど。

読み込まれるデータ
cb({"familylist":[
  {
  "name":"磯野",
  "father":"波平",
  "children":[
    "child":"サザエ",
    "child":"カツオ",
    "child":"ワカメ"
    ]
  },
  {
  "name":"さくら",
  "father":"ヒロシ",
  "children":[
    "child":"さきこ",
    "child":"ももこ"
    ]
  }
]})

jQueryでの読み込み処理

// ロード時に呼び
$(window).load(function(){
  $.ajax({
    type: "GET",         // HTTP通信 GET/POST
    url: "http://xxxxx/familylist.jsonp?callback=cb",   // リクエストURL
    dataType: "jsonp",    // データ型 xml/json/jsonp/script/text
    jsonp: "cb"  // コールバック関数
  });
});

// コールバック関数
function cb(json){

  // ループ処理 Family要素でループ
  for( i = 0; i < json.familylist.length; i++ ) {

    $("#familyList").append(json.familylist[i].name);
    $("#familyList").append("父:" + json.familylist[i].father);

    // 子供でループ
    for( j = 0; j < json.familylist[i].children.length; j++ ){

      $("#familyList").append("子:" + json.familylist[i].children[j].child + "
");
    }

  }
}


// 以下に書き込まれる

以上でOK!!


これでJSONP用にデータを提供したいときの定義方法もわかった。
それと何よりjQueryを使用するとチョー簡単にリクエストが作れるってことが
改めてわかった。当分はこれ使えそう。

以上

jQuery ajaxでXMLとかJSONとかJSONPとか取得 - 1

JavascriptのライブラリjQueryでXMLとかのデータを取得するまとめ。

jQuery・・・JavaScriptHTMLの相互作用を強化する軽量なJavaScriptライブラリ
         ライブラリでは一番有名かも。

今回はjQueryでXMLファイルの読み込み。
基本jQueryのajax関数を使用してデータを取得し、それを要素にappendしていく。


  波平
  
    サザエ
    カツオ
    ワカメ
  


  ヒロシ
  
    さきこ
    ももこ
  



ではよくある読み込み処理

// ロード時に呼び
$(window).load(function(){
  $.ajax({
    type: "GET",         // HTTP通信 GET/POST
    url: "sample.xml",   // リクエストURL
    dataType: "xml",    // データ型 xml/json/jsonp/script/text

    // 成功時に呼び出せる処理
    success: function(xml) { readXML(xml); }
  });
});

// 読み込み処理
function readXML(xml){
  // ループ処理 Family要素でループ
  $(xml).find("family").each(function(){
    $("#familyList").append($(this).attr("name"));
    $("#familyList").append("父:" + $(this).find("father").text() + "
");
    // 子供でループ
    $(this).find("child").each(function(){
      $("#familyList").append("子:" + $(this).text() + "
");
    });
  });
}

// 以下に書き込まれる

今回はここまで

2011年6月17日金曜日

GAE(Google App Engine) 環境構築-2 プロジェクト作成とデプロイ

今回はEcipseでのGAEのプロジェクト作成と作成したプロジェクトの
クラウドへのデプロイまで。

以下手順
  1. Eclipse用意
  2. Eclipse plugin(google plugin)とSDKインストール
  3. EclipsePluginの設定
  4. プロジェクト作成
  5. Eclipseで動作確認
  6. ディプロイ
  7. クラウドで動作確認
=== ①Eclipse用意 ===
http://mergedoc.sourceforge.jp/

3.6 Helios使用しましょ。

=== ②Eclipse plugin(google plugin)とSDKインストール ===
Eclipseのメニュ->ヘルプ->新規ソフトウェアのインストール
で以下のパスを指定

http://dl.google.com/eclipse/plugin/3.6

ここからgoogleのSDKとPluginをインストールする。

=== ③プロジェクト作成 ===
Eclipseのウィンドウ->設定->Google->Appエンジンにインストールしたプラグインのパスを設定。
Eclipseがインストールされているディレクトリのplugins->com.google.appengine.eclipse.sdkbundle.1.4.2_1.4.2.v201102111811
を指定。





=== ④プロジェクト作成 ===
ではやっとプロジェクトの作成。
ファイル->新規->Web アプリケーション・プロジェクトでプロジェクト作成

以下の画面でプロジェクト名とパッケージ名を指定し完了でプロジェクト作成。



=== ⑤Eclipseで動作確認 ===
とりあえず何も修正せずにコンパイルしてローカルで動作確認をする。


まずコンパイルする必要があるので、Eclipseのツールバーに出ている
以下のボタンを押下。


以下の画面でそのままコンパイル実行。


あとはEclipseのプロジェクトを右クリックし、実行。


http://localhost:8888/でアクセス可能!


=== ⑥ディプロイ ===
いよいよデプロイ。
デプロイはチョー簡単。

⑤のiconの一番右のAppエンジン・プロジェクトのデプロイを押下。


作成したプロジェクトを選択し、googleアカウントで登録したメールアドレスと
パスワードを設定しApp Engin project settingsを押下

アプリケーションIDにGAEのアプリに登録した名前を指定しOK押下。

最後に配置ボタンを押下。
するとコンソールにアップしてます的なログが次々に出てきて以下がでたらOK!!

Deployment completed successfully


=== ⑦クラウドで動作確認 ===

以下のサイトの管理画面のCurrent Versionにある数字をクリックして④のEclipseからの
実行画面と同じものが表示されればOK!!

https://appengine.google.com/


以上

2011年6月16日木曜日

Redmine 入門 やら アジャイルやら

今のプロジェクトにRedmineを使ってみよう。
まえのプロジェクトでも使っていたけど、利用者側だったので今回は管理者として
いろいろためしてみたい。ついでにRailsの勉強にもなるし。

ということでとりあえずRuby環境を構築。

インストールしたのはall-in-oneの
すぐに使えるのがいい。

で参考にしているのが以下のサイト。

3年使ったRedmineの使い方について共有したい10のこと

アジャイルって前から興味があったけど、これから少しずつ勉強していこう。

2011年6月15日水曜日

GAE(Google App Engine) 環境構築-1 アカウント生成とアプリ登録まで

GAE(Google App Engine)の開発環境構築と新規プロジェクト作成までを今一度まとめてみようかと。というか本格的にGAEを使用することになったところが本音ですが。

で以下、まずはGAE側(クラウド側)の準備としての、アカウント作成からアプリ登録までの手順
  1. Googleアカウント作成
  2. GoogleAppEngineへログイン
  3. CreateApplicationから認証コード発行
  4. 認証処理
  5. アプリ登録

=== ①Googleアカウント作成 ===
GAEはGoogleのクラウド環境で動作するサービスなんで、まずはGoogleのアカウントを取得する必要がある。
https://www.google.com/accounts/ServiceLogin?service=ah&passive=true&continue=https://appengine.google.com/_ah/conflogin%3Fcontinue%3Dhttps://appengine.google.com/&ltmpl=ae

以下サイトのアカウント作成をクリック

アカウント作成するための情報入力


=== ②GoogleAppEngineへログイン ===
作成したアカウントでログインする。

以下の画面が表示される。
=== ③CreateApplicationから認証コード発行 ===

②画面のCreateApplicationを押下し新規アプリ生成の準備をする。

ここで注意がGAEを使用するにあたり、一番最初だけ認証コードを発行する必要あり。
そのためには携帯電話に認証コードを送信する必要あり。
これが嫌なら登録できません。。(特に悪用されることはないはず)

=== ④認証処理 ===
送られた認証コードを以下の画面に入力して認証完了。

=== ⑤アプリ登録 ===
以下の画面で新規作成するアプリ名を登録する。

特に考えていない場合は、次回からは③のCreateApplicationボタンを押下すると
⑤の画面から始まるのでその時に登録すればよし!

以上

2011年6月10日金曜日

クリえいてぃぶ

仕事はソフトウェア開発。
趣味はAndroidとかWeb。

一応現代の職人。

職人の本質は常にクリえいてぃぶなことに挑戦し続けること。

でも今やっていることは、誰かがやってきたことの組み合わせ。


自分ができること、自分しかできないこと、見つける。

それで本物の職人になる。

目が覚める瞬間。

2011年6月9日木曜日

PHPで写真共有サイト構築 -2 実際のアップロード処理

今回は実際のアップロード処理について。

前回までにPHPのアップロード処理を呼ぶまでの前処理について説明。

http://kenzy-goldentime.blogspot.com/2011/06/php-2lastmodifieddate.html

今回のポイント

  1. アップロード先、ファイル数、ファイル名をパラメータで受け取る
  2. $_FILES属性でアップロード元情報とアップロード先情報を取得
  3. 写真が横長か縦長かを判定し、見える方向で画像を登録
  4. image用とthumbnail用の画像を作成
です。
まず1.のPHPとして受信した情報の取得について。
以下コード
  $photoDir = $_POST["photoDir"];
PHPでPOSTのパラメータを取得するには、$_POST["パラメータ名"]で取得可能。


次に2.の$_FILESについて。
変数「$_FILE」には、アップロードされたファイル情報が連想配列で格納されるらしい。
http://www.php-ref.com/web/03_move_uploaded_file.html
で、とりあえず今回使用する$_FILES属性は

  • $_FILE[ パラメータ名 ][ tmp_name ] →アップロード前の一時保存パス
  • $_FILE[ パラメータ名 ][ name] →アップロードファイル名
まずは上記のパラメータからtmp_nameから実際にそのファイルがあるかを判定。以下ソース
if (is_uploaded_file($tmpName)) {
次に3.getimagesizeを使用してサイズを取得し、横長か縦長かを判定。
$Jsize=getimagesize("$tmpName"); //画像サイズ取得

    // 横長写真
    if ($Jsize[0] > $Jsize[1]) {
      $Jthumsize = $Jsize[0];
      $SizeWidth = true;
    // 縦長写真
    } else {
      $Jthumsize = $Jsize[1];
      $SizeWidth = false;
    }
最後に4.image用とthumbnail用に画像を圧縮。
以下ソース。
function imageComplex($pixel, $Jsize, $Jthumsize, $SizeWidth, $motoFile, $complexFile){
  if($Jthumsize >= $pixel + 1){ //121ピクセル以上なら
    if ($SizeWidth) {
      $Jwidth = $pixel; //横120ピクセル
      $Jheight = $Jsize[1] * $pixel / $Jsize[0]; //縦サイズを計算
    } else {
      $Jwidth = $Jsize[0] * $pixel / $Jsize[1]; //横サイズを計算
      $Jheight = $pixel; //縦120ピクセル
    }
    $imagein=imagecreatefromjpeg("$motoFile"); //画像を縮小する
    $imageout=imagecreatetruecolor($Jwidth,$Jheight); //サイズ変更(GD2使用)
    imagecopyresampled($imageout,$imagein,0,0,0,0,$Jwidth,$Jheight,$Jsize[0],$Jsize[1]);
    imagejpeg($imageout,("$complexFile")); //サムネイル書き出し
    imagedestroy($imagein); //メモリを解放する
    imagedestroy($imageout); //メモリを解放する
  }
    else {//画像の横幅がもともと120ピクセル以下の場合は [thumbs] ディレクトリにコピーします。
    copy("$motoFile","$complexFile"); //ファイルコピー
  }
}
以下1~3のコード
if (is_uploaded_file($tmpName)) {
  $image =  $imageDir . $fileName;
  $thumb =  $thumbDir . $fileName;
    $Jsize=getimagesize("$tmpName"); //画像サイズ取得

    // 横長写真
    if ($Jsize[0] > $Jsize[1]) {
      $Jthumsize = $Jsize[0];
      $SizeWidth = true;
    // 縦長写真
    } else {
      $Jthumsize = $Jsize[1];
      $SizeWidth = false;
    }

    // image圧縮
    imageComplex(1600, $Jsize, $Jthumsize, $SizeWidth, $tmpName, $image);

    // thumb圧縮
    imageComplex(120, $Jsize, $Jthumsize, $SizeWidth, $tmpName, $thumb);


    chmod($image, 0644);
    echo $fileName . "をアップロードしました。";

} else {
  echo "ファイルが選択されていません。";
}
とまー、PHPで書くとスクリプト言語でデバッグしやすいかな。
ただ統一感をだすにはCAKEとかのフレームワークつかっていいかも。

2011年6月5日日曜日

PHPで写真共有サイト構築 -1 ファイルアップロード前準備 ファイル選択やらlastModifiedDateやら

では今回は実際に今回作成した写真アップロード処理だー。

<機能>
  • アップするフォルダを選択可能
  • 複数ファイルを選択可能
  • サムネイル一覧を表示可能
  • サムネイル一覧から複数選択でダウンロード可能
  • サムネイル選択後、実サイズの写真表示時に次ボタン、前ボタンでサムネイル一覧の前後の写真を表示
上記機能を実現するにあたり以下の機能も必要
  • アップ時にサムネイル用画像作成
  • 実ファイルも一定サイズを超えるとサーバに負荷がかかるため、一定サイズで圧縮
  • アップするファイル名は写真撮影時の情報でソートできるように撮影時の時間でリネイムする
ではまずは今回はファイルのアップロードを作成するに必要な処理を説明。


ファイルをアップロードするには当然ユーザに

  1. ローカルファイルを選択させ
  2. 送信ボタンを押下
させる必要あり。でユーザが2送信ボタンを押下したところで、htmlのformをつかってphpのファイルアップロード処理を呼び出す。

今回2を送信する前にやるべきことについて。
ポイントは、
  1. ファイル選択させる方法として、HTML5から可能になった複数ファイル選択させる
  2. ファイル選択した際にファイル属性からファイル作成日を取得しておく
1はHTML5の機能なので簡単。以下参照。
2はJavascriptのlastModifiedDateで取得可能
以下ソース。
function setFileCnt(form){
  var files = document.getElementById("selectFile").files;
  var fileCnt = form.fileCnt;
  var h = "";
  var n = "";
  var fName = "";
  var fileLen = files.length;
  for (var i = 0; i < fileLen; i++) {
    var file = files[i];

    // 最終更新日を取得
    var modifileDate = file.lastModifiedDate;
    var date = new Date(Date.parse(modifileDate));
    var yy = date.getYear();
    var MM = date.getMonth() + 1;
    var dd = date.getDate();
    var hh = date.getHours();
    var mm = date.getMinutes();
    var ss = date.getSeconds();
    if (yy < 2000) { yy += 1900; }
    if (MM < 10) { MM = "0" + MM; }
    if (dd < 10) { dd = "0" + dd; }
    if (hh < 10) { hh = "0" + hh; }
    if (mm < 10) { mm = "0" + mm; }
    if (ss < 10) { ss = "0" + ss; }
    fName += yy + MM + dd + "_" + hh + mm + ss + "";
    fName += ":";
    form.filesName.value = fName;
  }    
}
ポイントはファイルfile属性のlastModifiedDateで取得したデータをnew DateでData型にしてから日付を編集すること。以下が実際にできるファイル名。

  元ファイル名:IMG_2186.JPG
  作成日:2011/05/21 09:16 40秒
  作成されるファイル名:20110521_091640_IMG_2186.JPG

どす。これでファイルアップロードした先でもソート楽ちん!!

2011年6月4日土曜日

HTML5 基礎 複数ファイル選択

HTML5からローカルファイルを複数選択できるようになった。

方法はチョー簡単!以下ソース。


ポイントは

  1. typeがfile
  2. multiple属性を指定
  3. nameが[ ]つきの複数系
です。以下イメージ。
簡単ポイ!

HTML5 基礎 1 書式

本屋にいくとやたらとHTML5やらCSS3やらの入門書を目にする。
どうやら2011年の5月にこのHTML5の仕様の最終版!ってやつがでたらしく、いよいよ次世代のHTMLの時代が到来する、ってことで盛り上がってるからみたい。(2014年に勧告!?らしい、なが・・)


そういえばChrome使ってるから気づかなかったけど、explore使ってる大半の人はやっと9がでたことでこの恩恵を受けれるようになったよう。相変わらずおそいのーMさんは^^;

ま、それはともかくWebの世界で生きていくにはこの技術は必須でしょう、ということで学んだことをまとめてとこうかと。

まずは今までのHTMLと変わったこと。
  1. ヘッダーの書式が簡単に!
  2. マルチメディア対応できちゃう
  3. CSSとの住み分けが明確化
  4. ローカルアプリ作れちゃう
で最初の1の書式について
以下がHTML5のヘッダー
< !DOCTYPE html >

HTML5の基礎
ポイントは
  1. HTMLのDOCTYPE宣言、metaタグが簡略化された
  2. DOCTYPE以外のタグはすべて小文字
  3. 終端タグなくても大丈夫
ま、徐々に勉強していくのね。

2011年6月3日金曜日

PHP 入門 -1

ひょんなことからApatchサーバに写真共有サイトを作ることになったわたくし。

JavaやJavaScript、Rubyは何となく使っていたけど、それらを使えないサーバにどうやって作ろうかあれこれ考えた結果、PHPが使えることが分かったため、ついにPHPを使うことになりました!

ということで、写真共有サイトを作るにあたって学んだことをまとめます。


でまずやったことはPHPの基礎を学ぶこと。
以下サイトを参考にさせていただきました。

http://www.scollabo.com/banban/php/index.html


<学んだこと>
  • 拡張子はphp
  • <?php ~ ?>でソースは囲む
  • 変数の宣言使用はすべて「$」を頭につける 例 $name = "kenzy";
  • 文字列連結はドット「.」を使う
  • booleanやstringの変数が使える
  • 条件文もCチックに使える
一番簡単なコード

<?php echo "こんにちは";
?>

とまあ、こんな感じで簡単に使用できる。


<PHPのいいところ>
    • なんといってもスクリプトなのでコンパイル不要!
    • 文法もJavascript等のスクリプトをやっていたらすぐ理解できる
    • それいでいてサーバサイドの処理が書けてしまう

    人気者なわけですは。
    次回はファイルアップロードについて記載しやす。

    初小学校運動会!

    上の子の運動会が先週末の雨で順延され、火曜日にあった。

    当然仕事はお休みして行ってきた。

    最初は50m走。
    スタート前から型をいからせかなり緊張。。
    若干スタート遅れて結果は4位だったけど、頑張って走っている姿に感動!


    次は関ジャニのヒーローの歌に合わせてのおどり。


    これは振付がすごくおもしろく、かつ独自のアレンジ!?を加えてのステップが愛らしくすごいよかった。最後のポーズも決まったー!

    最後は1・2年での対抗リレー。


    なぜかクラスで4人しか選ばれないリレーのメンバに選ばれたU太。
    頑張って走ったけど、こちらも結果は4位。でも一生懸命走る姿にまた感動!

    やっぱり幼稚園とは違って小学校はどこかさばさばしてる感じはあったけど、子供の新たな成長の舞台がはじまったって感じでした。

    【スマート農業】 いまさらだけど、いまだからこその農業IoT 

    久々投稿 転職してはや2年半。バタバタしてる中で、あーっという間に時間は過ぎてきた。 仕事はそれなりに順調だけど、ただやっぱり自分で何かを起こす!ということはではできていなく、、、年齢45をこえ、、、、、とくに昔からずーとやろうやろうと言って実現できてなかっった農業IoT。。 去...