Friday 9 December 2011

[2002] No such file or directory - Mac/XAMPPでMysql接続エラー

XAMPP for MacでMySQLに接続できないエラーが起きたのでメモ

この何の変哲もないコードで
        if( !$conn = mysql_connect( $host, $user, $pass ) )

出たエラーはこれ

Warning: mysql_connect(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock)

結論から言うと、ホスト名($host)を localhost → 127.0.0.1 に変更で解決しました。
Mysqlは localhostと指定すると unix domain socketを使うのですが、
IPで指定することで TCP socket を使わせることができるのだそうです。

windows版XAMPPでは問題が起きなかったため、それなりにとまどいました。

さらに時間をくわせたのが、上記エラーをググって出てきた、
cakephpのbakeする時?とかに発生するらしい
mysql.sockのパスの変更による解決。せっかくなのでメモ

php.iniで指定したパスと実際に見ているところが違う場合に同様の エラーが起こるらしい

解決法は以下らしい
1 - php.iniのパス変更 参考記事
2 - シンボリックリンクの作成  参考記事
3 - my.cnfの設定変更 参考記事

ちなみに phpinfo() でphp.iniの場所と、見てるmysql.sock の場所が確認できます

※因果関係は不明ながら、この後mysqlが起動しなくなる事象が発生
別のmysqlが起動してますみたいなメッセージ出てた。で、状態としては、
・ブラウザ上でphpファイルは普通にmysqlにつないで情報読み込めてる
・phpmyadminのそのページで使用しているテーブルを読み込もうとするときのみ 2002 エラーが発生
・phpmyadminでその他のテーブルは普通に見れる
てな感じでした。ググって出てくるmysql起動しないも当てはまらないし、一旦放置

Monday 5 December 2011

ファイルパーミッションの概要、変更方法等まとめ

Macを使うようになってから、ファイルパーミッションの問題でつまずくことがでてきた。
-外付けハードディスクにファイルをコピーできない
-新しいフォルダが作れなくなる
-OpenPNEのインストールに失敗する
といった問題が発生した。

そこで個別の対処法をぐぐるだけでなく、
一旦ファイルパーミッションについて整理することにした。

▼パーミッションの概要
各ファイルに対し、誰がどんな操作が可能かを設定するもの。
全ファイルとかディレクトリごとに設定されている。

▼パーミッションの分類、表記
UNIX系システムにおいては、
各ファイルに「3タイプのクラス」ごとに「3種類の権限」を設定する。

-クラス クラスとはOSで設定するものでアクセス経路とかは関係ない 
owner ファイルの所有者。初期はそのファイルを設置したアカウント
group 所属グループ。初期はそのマシン内のアカウント
others 上記をのぞくユーザー

-タイプ 3種類。他にも種類もあるが、いったん省く
read 読み込みファイルを読む権限
write ファイルに書き込む権限。ディレクトリならフォルダ作るとか
execute ファイルを実行する権限。ディレクトリなら中に入る

-表記
例 -rwxrwxrwx
文字表記。クラスとライプの組み合わせごとに位置が決まっている
1番左はファイルの種類とか -はファイル dはディレクトリ
2-4、5-7、9-10はそれぞれ、owner,group,others

例 755
数字表記。左からowner,group,othersで、r=4、w=2、x=1で足す。

▼パーミッションの確認方法
-FTPクライアントで見る
- ls -l で見る

▼パーミッションの変更方法
-FTPクライアントで変更する
- chmod 変更内容 ファイル名 で変更

Saturday 3 December 2011

ポートの問題でXAMPPのApacheが起動しない時の対処

シンプルに対処だけじゃないところが素敵でした

・エラーメッセージを見てみる
・ポートの占有状況、占有プロセスを確認する
という形での対処です

XAMPPでApachが起動しない場合のわりと汎用的な調査・解決方法まとめ

Sunday 27 November 2011

大切にするもの

ちょっと技術には関係ないことを

今の会社を12月でやめることにしました
やめるにあたって思うことはいろいろあったのですが、
一つ、方法論レベルで変えようと思うことがあったので書きたいと思います

僕は、○○をやったほうがいいよ~という意見にあまり共感しません

人生は有限である以上、時間の使い方は選択と集中をすべきだと思っています
どんな経験からでも学べることがある以上、やったほうがよいことなんて無限にあり、
そこから得られるものが、いかに自分の将来の方向性と合致するか
また効率よく得られるかということを考えぬいて選び取っていく必要があると思うのです


そんな考え方の背景もあり
僕は仕事を、スキルと実績を残すことが最優先であるとして、
職場の人付き合いをあまり大事にしていませんでした
もちろん愛想は悪くないし、仕事上での相手への気遣いというのには細心の注意を払っていましたが、
例えば仕事後の飲みとか、仕事時間中の雑談なんかは距離を置いていて、
仕事を盾に忙しいオーラを発していたと思います(実際そうやっても日付が変わることはしばしば)

そんなこんなで上海のオフィスを去ることが決まった後、
僕はたかだか3ヶ月(帰国もあって実質2.5ヶ月弱)いただけで、
かつあまり人付き合いのよくなかった自分の去り際はあっさりしたものになると思っていました

しかし実際に僕を待っていたのは、蟹、火鍋、中華、チーズケーキ等数々の送別会
本当に暖かい言葉、残念そうな顔

最後の日、僕は持ってきたチョコレートを配り、握手をしながら自問自答しました
もっとみんなに感謝を伝え、笑顔の思い出を作ることができたんじゃないのか
でも、情を捨ててでも突き進まなければならない厳しい道を選んだのではなかったか

程度の問題だろうし、明確な答えが出たわけではありません
最初に書いた選択と集中をすべきという考え方は変わりません
ただ、今後これまでと同じように、無口で冷めてて控えめというキャラを盾にして仕事だけに没頭することはないでしょう

そして幸い、彼らには上海に行けばまたいつでも会うことができる

Sunday 13 November 2011

Notice: Undefined indexへの対応

さて、前回の記事との間でシンガポールから上海勤務に、そしてその先へ‥
僕の置かれる状況はめまぐるしく変わる。そんなことが楽しくもあります

今回はcodezineというサイトの「プログラミング未経験から始めるPHP入門」という記事を復習していました
すると、前回は問題なく動いたコードが、エラーを吐きました。

Notice: Undefined index

調べてみると、配列が未定義の場合に起こるエラーのようです
ちなみに変数が未定義の場合は Undefined variableですね

以下のようにエラーを表示しないという対応もありうるようですが、
・@(直後の操作のエラーを表示しない)をつける(超簡単!使いたい!)
・error_reporting(E_WARNING); で表示しない(これは一撃だけど全くエラー見えないのも不安)

初心者としては丁寧にエラーを潰す方法を探求

$_REQUEST["hoge"] = isset($_REQUEST['hoge']) ? $_REQUEST['hoge'] : null;

これでエラーは消えましたとさ

だけど、配列内でもエラーが起きる奴と置きない奴がある理由がわからんのと
エラーが起きたアイテム全部これかくのはどうかと思うので、まとめて処理するfunctionとか作れないかなってとこでもう少し要探求ですな

Sunday 7 August 2011

夏休みに旅行をやめた話

まだ始めて間もないのに、間が開いてしまいました

この間も、別ファイルからの読み込みや、オリジナル関数の作り方を学んではいたのですが、
書くコードを考えてるうちにぐだって今にいたっています

それはおいといて、3日間夏休みがもらえることになりました
当初は、土日シンガ祝日と合わせた6日間で東南アジア3カ国を回ることを考えていました

むしろ、計画もたて、タイムライン、航空券、ツアー、宿まで決定済みでした
まずはホーチミンに飛んで、市内観光とメコンクルーズとクチトンネル訪問
ついでシェムリアップに飛び、アンコール遺跡を見る
そっからバンコクまで陸路国境越え
最後はアユタヤを見た後、飽きるまでバンコク、パタヤでマッタリ

しかし、休みの日程が確定して、いざ予約をしようと思ったときどうしようもない疑問をいだきました

で、今行く必要あるの?

そして再確認してみました
残念ながら僕が東南アジア周遊に行こうと思った最大の理由は、
「今、せっかく東南アジアにいるし」でした

しかし現実に東南アジア(シンガポール)にいる場合と
日本にいる場合での東南アジア旅行(ここではタイ往復)を比較すると
・時間、往復10時間程度の短縮
・航空券代、往復35000円程度の節約

今ここで6日間をまるまるエンジニアリングにあてられることは、どれだけの価値があるだろう
そして、エンジニアリングによって「サービスを作れる」ようになったとき
僕の目の前に広がりつながることのできる世界は、どれだけ広大なのだろう

そして決めたのです
「夏休みは引きこもろう」と

Thursday 21 July 2011

ソースコードの貼り付け方

さて、順調に記事を重ねている現状ではありますが、
一つ大きな懸念を放置したまま進んでおりました

それは、ペースト時ソースコードの改行とかインデントが無視されてしまうことです
これでは仮にこのブログを呼んでくれる方がいても、コードは読んでくれないでしょう

そしてとりあえず使うことにしたのがコレ
ソースコード HTML化 コンバーター「唐辛子」

まずはブログ設定からCSSコードを貼付け
そしてコンバート、HTML化されたコードを貼りつけると…
<html>
<body>
<?php 
    for( $num = 0; $num <= 100; $num ++ ){
        if( strpos($num,"3") !== false || $num%3 == 0 ) {
?>
<span style="color:#FF0000;"><?php echo($num); ?></span>
<?php 
}
        else{echo($num);
}
}
?>
</body>
</html>

よしよし

ちなみにこのページにはもっと色々な方法がのっておりました
・javascriptで変換
・HTMLコードに変換して貼付け
・ブログツール用のプラグインで変換
・共有してURL生成して貼付け
等の方法があるみたいです

職場でちょくちょくwordpressという単語を聞いていただけに、
ブログツールとかちょっと使ってみたいな~と思いますがとりあえずこちらも先送りで

Wednesday 20 July 2011

subwayでオーダーするコード

今日は、arrayとforeachの勉強をしたので、
復習がてら書いていこうと思います

この記事、最初は勉強したことを箇条書きにしようかと思っていたのですが、
僕が勉強に使ってるこの記事の最後に都合よく課題がありました

「マルチセレクトリストで選んだものを配列として取得し、foreachで記述しよう」

ここで急にインスパイアが僕を襲いました。これはsubwayっぽい。

みなさん、サンドイッチ屋のsubwayをご存知でしょうか
シンガポールのsubwayは、セットにするとポテトではなくカントリーマームみたいな甘~いクッキーがついてきて、僕のお気に入りなのです

で、そのsubwayの特徴の1つがはさむ野菜を自由に選べること
ということで、はさむ野菜をマルチセレクトリストで指定すると、
店員が野菜を確認した後ソースを進めてくるコードを書くことにしました

<html>
<body>
<?php
    if(!isset($_POST['submit'])){
?>
店員:野菜はどうされますか?<br />
    <form action="<?php echo $_SERVER['SCRIPT_NAME'] ?>"" method="POST"> 
     <select name="vegetable[]" multiple size="5">
        <option value="レタス">レタス
        <option value="トマト">トマト
        <option value="きゅうり">きゅうり
        <option value="オニオン">オニオン
        <option value="オリーブ">オリーブ
        <option value="チリ">チリ
        <option value="ピクルス">ピクルス
     </select><br />
    <input type="submit" name="submit" value="オーダー"> 
    </form>
<?php
    }
else{
    if(is_array($_POST['vegetable'])){
        foreach($_POST['vegetable'] as $vege){
            echo($vege .'と');} ?>
でよろしいですね?<br />
オススメのソースは
<?php 
    if(count($_POST['vegetable']) >= 5 ){
        $recommend="BBQソース";}
    elseif(count($_POST['vegetable']) >= 3 ){
        $recommend="スイートオニオンソース";}
    else{$recommend="ハニーマスタード";} 
            echo($recommend); ?>になります
<?php
}
    else { echo('野菜お嫌いなんですね'); }
}
?>
</body>
</html>

苦心の末にできたのがこれ

途中でひっかかって修正した部分は、
・<select name="vegetable[]"の[]を付け忘れる⇒データ取得されず
・if(count($_POST['vegetable']) >= 5 )をif(count($_POST['vegetable']); >= 5 )に
・オススメソースのif構文で延々とエラー⇒手打ちで書きなおしたらなぜか通る
最後のやつはいろいろ変えて試して相当時間食いました。半時間ほど

あと$_SERVER['PHP_SELF']はXSS脆弱性があるらしい
対策等を見つけましたが、今は深入りすべきではないと判断


▼今日学んだこと
・$aaa=array(a,b,c) 変数に配列を代入
・$aaa=( a => b, c => d) 連想配列の書き方の1つ
・foreach($aaa as $aa){} 配列を全部繰り返し
・配列をいじる関数の存在 countとかexplodeとか
・print_rで見ながらデバッグ

Saturday 16 July 2011

php学習再開

今日からphpの勉強を再開したことに伴い、
その記録をブログに残していこうと思います

最初の記事は、簡単な自己紹介とナベアツコードを

僕は現在シンガポールに常駐して、日本のガラケー向けソーシャルアプリを作っています
役割はプランニング、htmlコーディング、ログ解析、雑用となんでも屋さん状態
そんな僕がプログラミングを学ぶ理由は、現在のスピード感・自由度の向上であったり、
細々とでも自分の作りたいwebサービスを作って運営する、という将来のあり方を見据えてのものであったりします


そんな僕がphpのとっかかり用に選んだのはこのサイトのこの記事
Melonfireのファウンダーが2004年に書いたちょっと古いものです
「php begginer」 でググってTOPのサイト選んだだけですが
ちなみに、環境はwindowsにxamppをインストールして使っています
エディタは秀丸にzenコーディングマクロとかいれて少しカスタムしたものです

そして今日とりあえず書いたコードがこれ

<?php 
for( $num = 0; $num <= 100; $num ++ ){ if( strpos($num,"3") !== false || $num%3 == 0 ) {?><span style="color:#FF0000;"><?php echo($num); ?></span><?php } echo{print($num); }}?>

「3がつく時と3の倍数でアホになるコード」です
とりあえず赤くすることでアホということにしておきました

去年の9月頃、phpの勉強を始めると言った僕に職場のエンジニアの方がくださった課題
こう書くんだな~とか思いつつ実際にはかかず、
勉強を中断してしまったあの日を乗り越えやっと書きました

ネットで検索すると、結構いろんな書き方が出てきますが、
僕のはとりあえず赤字にする部分の書き方がいけてないな~と思い書き直しました
"の扱いに困るも、"は前に\(円マーク)でエスケープすることを知り
echo( "<span style=\"color:#FF0000;\">".$num."</span>");
でいけました

▼今日学んだこと
・forで繰り返し処理-for(開始条件、終了条件、繰り返し方法){処理]
・if,elseの条件分岐-if(条件){処理}elseif(){}else{}
・echo時、",'は\(半角¥)でエスケープ

今後はせっかく仕事で目の前に豊富なコードがあるわけですので、新機能の開発で学んでいきたいですね