読者です 読者をやめる 読者になる 読者になる

PHPで経度・緯度の位置情報を取得する~file_get_contentsできないとき向け~2017年

PHP 日記

f:id:nazuna_0124:20170309204724p:plain

  • GoogleMapを利用したい!
  • 位置情報は経度と緯度で設定が必要。
  • Googleにgetで投げればjsonで返してくれるサービスがある。
  • file_get_contentsで出来るって書いてあるのにできない!!!


という方(ちょっと前のわたし)向けの更新。

やや古い程度の情報が軒並みだめだったので、表題に年を入れてみたりしました。


コードの結論はこちら。

<?php

$address = "ディズニーランド";
//$url = "http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=India";
$url= "https://maps.googleapis.com/maps/api/geocode/json?address=$address&sensor=false&region=India";

$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$res = curl_exec($ch);
curl_close($ch);
$resData = json_decode($res);
echo "lat:" , $resData->results[0]->geometry->location->lat;
echo "<br>";
echo "lng:",$resData->results[0]->geometry->location->lng;
echo "<br>";
echo "ファイルの中身<br>";
echo var_dump($resData);

?>


もし、これでもだめなときはphp.iniの設定確認です。

allow_url_fopen = On になってることと

opensslがコメントアウトされてないかをチェック。


NetBeans + xampp環境では設定済みで大丈夫でした!


file_get_contentsで動かない時は、curl関数を使うまでは

すぐに見つかったんですが、試しても動かず。


いくつか回って動くのを見つけた次第でございまする。


先人の皆様に敬礼!

職業訓練の授業55日目~蔵書管理システム2日目、クラスの紹介

授業

f:id:nazuna_0124:20170310221050p:plain

ずっと調子の悪かったマイぱそこんが治りました!

実は最近、急に電源が落ちるという恐ろしい環境でプログラミングしてました。


原因はそのまんま電源でした

交換しただけで完了。1万以下で元気に復活。よい仕事しました。


せっかくなので、交換の手順を紹介。


  • 原因がわかりそうな人を見つける。
  • 交換してもらう。
  • お礼にランチおごる。


…え? 出来る人を探すのって自分でやったのうちに入らないのですか???


さて、今日は昨日と代わり映えしないので早めの更新です。


今日のハイライトは疑問に即答する先生でした

配列のarray_filterのマニュアル眺めてたら見つけたこちら。

PHP: array_filter - Manual

<?php
$input = 4;

if($input & 1){
    echo '奇数';
}else{
    echo '偶数';
}
?>


やりたいことはわかるけど、何やってるかわかんない!

& 1 ってなに??? ぐぐってもわからずギブアップ


先生<「論理積ですね」


かっこよく即回答。


はて論理積??? ビット演算か!


あ~ あれねー。さ、さいきん流行ってるよね…。ほ、ほら特に若い世代にさ…


こういう判定もあるんですねー。勉強になりました。


すぐ聞ける人がいるって環境は大事!



などと書いて終わらせるつもりでしたが、クラスを習ったんでした。


どっちかっていうと、サブルーチンとかそういう感じの説明でした、まる。

職業訓練の授業54日目~蔵書管理システムと三者面談~

授業

f:id:nazuna_0124:20170303232129p:plain

人間には2種類いるそうな。直感派と思考派です。


皆様はどちら?わたしはガチガチの直感派です


そして自分の直感を全く信じない派です


さて、そんな自分のカンが告げています。


今の技術で作れる蔵書管理システムは絶対使わない


理由は後で考える事にして、時間もあまりないので今回は信じることにします。

(主義をあっさり曲げる派でもあります)


代わりに何を作ってたかといいますと、データベースに接続すると

テーブル一覧出して、テーブル選択すればinsert用のフォームを生成して、データがあればselectを全表示する。


ってのを1つのファイルでやってくれるとゆーやつです。


出力結果を、ファイルで別途保存すれば、あっという間にフォームの完成!


フレームワーク使ったほうが楽な気もしますが、気にしません。


少し話を戻しまして、表題の三者面談です。

三者面談といっても親じゃないです。担任講師と就職指導員の方です。

これがあるので、二日間はほぼ放置でプログラムです。


面談前に、履歴書、職務経歴書を作成して今後の方針を決めましょうというもの。


要は勉強ばっかしてないで、ちゃんと就職のために動いてねです。


この種の強制力はとても大事です。

ついグダグダ先延ばしにするわたしにはピッタリ!


文句ばっかり言いながらも、通うことにしてよかったなーと、しみじみ。


こっそり感謝しつつ、おやすみなさい!

PHPのここをもっとちゃんと教えてよ!~その2:未入力判定の注意点~

PHP 日記

f:id:nazuna_0124:20170327183448p:plain

連日の不機嫌マークごめんなさい!


だが私は謝らない。


言ってみたかったのに、すでに謝っていました。ごめんなさい。(2行ぶり2回目)


さて、今回の不満はPHPの鉄板ネタです。

気が付きさえすれば情報は溢れてます。


明らかに基礎的な知識の範疇なのに曖昧だったので、しっかりやってよ!とゆーお話。


‘'(空文字)、Null、0は別のものなのに、PHP上で同じものとして扱われる問題です。


具体的にはこちら。名前と年齢のフォームがあり、空白の判定をします。

<?php

    if(!empty($_POST)){  
        if(!$_POST['name']){
            echo '名前が未入力です。<br>';
        }
      
        if(empty($_POST['age'])){
            echo '年齢が未入力です。<br>';
        }
    }
?>

<html>
    <body>
        <p id="message"> </p>
        <form action="" method="post">
         <div>名前<input type="text" name="name" value="Nazuna"></div>
        <div>年齢
            <select name="age">
                <option></option>
                <option value="0">0</option>
                <option value="1">1</option>
                <option value="2">2</option>
            </select></div>
            
            <input type="submit"  value="送信">    
        </form>
    </body>

    </script>    
</html>

このときに、うっかり空判定に、empty($POST[‘age’])や!$POST[‘age’]を使うととりあえず罠にはまります


0でも未入力になってしまうのです。0歳児は存在するよ!


とはいうものの、マニュアルには書いてあります。

PHP: PHP 型の比較表 - Manual

こういう所在こそ最初に是非おしえてくだされ…


一緒に覚えておきたいのが、==(カッコ2つ)で比較すると、0と空文字とNullは全部Trueで返ってきます


ちょーど少し前に流行った、こちらを確認してください。

togetter.com


この例を踏まえて、この期の動作です。


0だと芯が入ってるので、先に抜かなきゃだめです。

Nullなら入れるだけでおっけー。

コードでいうと。

$トイレットペーパー=0;

//トイレットペーパーの交換処理。
if ($トイレットペーパー==0){
   echo '芯をを取り出す<br>'
}
    
echo '補充';

$トイレットペーパー=null にしても、「芯を取り出す」って出てきます。


その芯どこにあった!

今回は怒られませんが、処理によっては困ったことになります。


知ってればカッコ3つにするだけです。

運が悪いとはまります。


どーでもいいところで、つまづかないように!>ちょっと前のわたし


ちょっと前のなずな<「ハマッタヨー」

PHPのここをもっとちゃんと教えてよ!~その1~

日記 PHP

f:id:nazuna_0124:20170326223448p:plain

ここのブログの存在意義は!

数ヶ月前の自分に教えたいこと!

どこまでも自分本位です。

などと言いつつも、理解の遅い私が理解できたこと

大抵の人がわかるので更新して行く意味はきっとあるかもしれないという説が捨てきれません。



さてさて、授業は作るだけで終わってしまうので、復習がてらのおはなしです。


改めてPHPの利点その1はデータベースを元に動的にhtml出力できることです。


その処理部分とHTMLの記述方法についてです。


最終的な出力はWebになる都合もあって、処理とデザインは別々に担当が多いです

(自分で作るにしても、違う日とかが多い)


というわけで、単純なデータを元にしたセレクトボックスの作成です。

結論としては3つ目の方法がおすすめだよ!とゆーおはなし。

<?php
    $names[] =['name'=>'Sato',"age" => "21"];
    $names[] =['name'=>'Suzuki',"age" => "31"];
    $names[] =['name'=>'Takahasi',"age" => "41"];
    $names[] =['name'=>'Ito',"age" => "51"];
    
?>


<html>
    <body>
        <select>
            <option>aaa</option>
            <option>bbb</option>
            <option>ccc</option>
        </select>
    </body>
</html>

まずポイント。html部分にはデータとは関係なく並べておきましょう。


んで、ここからです。おおむね3つの方法です。

たぶん、最初に習う方法

<?php
    $names[] =['name'=>'Sato',"age" => "21"];
    $names[] =['name'=>'Suzuki',"age" => "31"];
    $names[] =['name'=>'Takahasi',"age" => "41"];
    $names[] =['name'=>'Ito',"age" => "51"];
?>
<html>
    <body>
        <select>
          <?php
            foreach($names as $key => $val ){
                echo '<option>' .$val['name'] . '</option>';
                }
           ?>
        </select>
    </body>
</html>



なんとなくやりたくなる方法。html部分が極端に少ないのが魅力。

これやると、html出力用の自作関数作ろうかと考えます。

一度部品を全部、変数に入れてしまってあとで出力する方法です。

<?php
    $names[] =['name'=>'Sato',"age" => "21"];
    $names[] =['name'=>'Suzuki',"age" => "31"];
    $names[] =['name'=>'Takahasi',"age" => "41"];
    $names[] =['name'=>'Ito',"age" => "51"];
    
    
    $selectBox = '';    
    $selectBox .= '<select>'; 
     foreach($names as $key => $val ){
                $selectBox .= '<option>' .$val['name'] . '</option>';
             }
    $selectBox .=  '</select>'
?>


<html>
    <body>
        <?php echo $selectBox ?>
    </body>
</html>


本命がこちら。<?php ?>の記述が多く、一見すると避けたくなるのは罠です。

<?php
    $names[] =['name'=>'Sato',"age" => "21"];
    $names[] =['name'=>'Suzuki',"age" => "31"];
    $names[] =['name'=>'Takahasi',"age" => "41"];
    $names[] =['name'=>'Ito',"age" => "51"];
    
?>
<html>
    <body>
        <select>
        <?php foreach($names as $key => $val ): ?>
            <option><?= $val['name'] ?></option>
        <?php endforeach; ?>
        </select>
    </body>
</html>


特に何もなければ3つ目の書き方に慣れましょう


短い記載だとあんまし変わらないんですが、ご承知の通りhtmlはclassやら、divやら

ループするデータ箇所以外にもいっぱい記述があります。


他の方法を取ってると、いざ本番のhtmlに処理を渡そうとしたときに困ります←困りました。


尚、かなり早い段階でこの話題は聞いたはずなんですが、こういう教え方はしてくれなかったのが

アイキャッチ画像の怒りマークにあらわれています


これ見た人はどーでもいいところで躓かないでね!

職業訓練でのPHPの総括

日記

f:id:nazuna_0124:20170312082946p:plain

本日は土曜日ですので、もちろん授業はおやすみです。

残る授業は蔵書管理システムを作成して終わりです。

お休みをはさんで4月からはJAVAに入りますので


プログ更新を継続させるため一足早くまとめです。


結論としては、少々批判的となりますが、この程度の時間数をPHPに使うなら

全部Javascriptに使ったほうがよかったかも、です。(もしくはアルゴリズム


この辺はPHPというよりWebアプリというもの自体も含んでいます。


PHPとはどんな言語?となると、学習コストが低い、覚えるのにあまり時間かからない点があります。


例えるなら、AT専用の運転免許が近いイメージです。


車を動かして、曲がる、止まるだけなら小学生でもできます


でも都市部で運転しようと思ったら、そもそも道路交通法知ってなきゃいけないですし

若い(経験が浅い)と事故が多く、保険料も高いのです。


なんとなく動くもの作るだけなら早いんですが、安全にWebで公開する、それを多人数で作る

などになるとあっさりと難易度があがります。


今回の授業で覚えられた分は、田舎の私有地で運転しても田んぼにあんまり落ちない

といったところ。道路には出るにはちょっと怖いです。


すぐにPHP以外の知識が必要になってくるので、そのあたりがちょっと大変でした。


これらの知識がJAVAにも行かせることを祈って!

職業訓練の授業53日目~フレームワークとMVC~

授業

f:id:nazuna_0124:20170304205638p:plain

出かける直前にお財布やスマホが見つからなくて

脳内でctrl+F押して検索しようとしてる皆様こんばんわ。


(わたしだけじゃないよね)


SQLに慣れてくると select 持ち物 From 部屋 where カテゴリ = ‘必須’ とかの

SQL発行したら集まってくれないかなーと妄想する日々です。


いろんなことがデータベースに入ってたら楽なのにね!


それはそうと、Excel管理からシステム化するときって大抵データがセル結合化とシート分けが駆使されてて

データベースに入れるだけで多大な労力が取られますよね。


小学校でプログラム教えるらしーので、一緒にデータベースも教えてほしいです。



話を戻しまして、本日の授業です。

一言掲示板(Twitter風)で一区切り。本日はMVCフレームワークでした。


対象はルールにうるさいと評判のcakePHPさんです。


いつも思うのですが外国のページってなんでダウンロードファイルにたどり着くまで遠いのでしょう

たいてい迷子になります。


どこかのブログさんやらを参考にすると、古くてデザインが変わってることが日常茶飯事。


MVCをさらっと説明しつつ、導入までやって、書いてある通りに作成。


ね?簡単でしょ? と言わんばかりですが、さっぱりわからん!!!


悩んでいたら、少し前に進んだ気がします。

PHP10行で作る超シンプルフレームワーク - かってぃのブログ | choilog [チョイログ]

参考にさせて頂いたのはこちら。随分古い記事ですけれども。


絶対MVCの説明の前に、htaccessとフロントコントローラーの説明をすべきです!!!


この辺やってみると、小うるさい命名規則にもなんとなく納得がいきます。


多人数での開発のためにはって説明だと半分な気がします。



などと書きつつ、もしかして普通の人はフレームワークのルールみただけで把握できたりするんでしょうか…


すいません。いちいち説明されないとわからないタイプです


尚、参考にさせて頂いた記事様ですが、いざindexを表示したいときどうしよう。とか。

基本アドレス/xxxxx.aaaaa みたいに直下で適当なアドレスを入力されるとエラー出る。


なんてのを解消しようとすると、普通にフレームワーク使ったほうがいいんじゃとなってまた逆戻り。


本日も、もやもやしながら寝ることにします!