忍者ブログ

カウンター

プロモーション

カレンダー

11 2024/12 01
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

AntinomyMy の実験室

   私のWEBアプリ実験室です!

ブログ内検索

楽天でお買い物

twitter

最新トラックバック

最新コメント

忍者アナライズ

ウェザーニュース

バーコード

本を買う

アクセス解析

Google+

[PR]

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


No Image

なんじゃこりゃぁ!(^Д^;)`hostname`と'hostname'の違いwww(バッククオォート はPHP で!)

PHP の調べ物

PHPってたまに知らない記述があるんです・・・・・

それは知ってたんですが
Get the IP address (192.168.X.X, assigned by the wireless router) in my webpage?
この記事見て思った・・・


$myIP = gethostbyname(trim(`hostname`));
この
`hostname`って記述 Shit+7 キーの「'」じゃない・・・
これ、MySQL の記述、クォートにも使うShift+@キーの「`」
なんなんだ?

そう思ってやってみた・・・・

echo `hostname`;  //①
echo 'hostname';  //②

違うがな^v^;
①だと、自分のPCの名前になる!
②だと、そのまま「hostname」って表示される・・・・

どんだけぇ~~~w

PHPマニュアル調べても何処にこんな機能が書いてあるのか不明w

気になったので色々やってみた!
echo `dir`;

え!www 酷いw 酷すぎるぅーーーーー!

echo `path`;
ええええええw

色々ショッキングなんですが、絶句ですw


とりあえず、他浮かばなかったので
google で検索しようとすると ` は " と同じ扱いされてるのか
検索できないwwwwwwwwwwwwwwwwwwwwwww

これは困ったw

"'" とかで括っても検索うまくできません。

色々驚いた記述なのでブログ載せてみましたorz


2019/05/21 追伸
色々、調べてて分かった・・・
バッククオォート で囲むと、なんと!
シェルコマンドを実行するのだ!!!!!!!!!!!!!!!!!!!!!!!!!!!!

やっと、やっとわかった。。。。

実行演算子https://www.php.net/manual/ja/language.operators.execution.php

 バッククォート演算子の使用は shell_exec() と等価です。
と公式にありました!

理解がどれだけ立ってだろうか、4年経ってから、やっと分かったという。
( ..)φメモメモしておいてよかった。

めでたし、めでたし。

拍手[0回]

PR

No Image

スクレイピングのGoutte インストール(Composer)とPhar アーカイブ化(box2-lib)

PHP の調べ物

PHP で、どの程度か分からないけど、
ブラウザで閲覧した時と同様なCSS構造をしっかり表現してくれるらしい
それがGoutte らしい。

HTMLのソースに、CSS を適応してくれる解釈が出来るのか?!

とりあえず、本当はJavaScirpt まで解釈して動的な数値やら読み込みやら、
置換されたパス、他に動的に付け加えられる内容(例えばスクロールすると読み込む何かとか)
それらまで実は表現して欲しいけど、どうもそれはPhantomJS とか
JavaScript の解釈用の何かを入れた方が早い(のかな)?
どこまでやってくれるのか、全くわからないけど、メモ(このブログ)を
残しながらやってみようと思う。

とりあえず、色々、色々考えまくっているが、
調べながら分かった事のメモを残す(毎度長い前置きorz)


さて、その今回の対象物Goutte
公開してるのは
https://packagist.org/packages/fabpot/goutte
こっちは、どうも公開方法に拘っている?っぽい?
https://github.com/FriendsOfPHP/Goutte
つまり、Composer を使う事を前提にしてるっぽい。

説明関係
http://wiki.nonip.info/index.php/Php/Goutte
http://ss-complex.com/2014/05/php_blog/
http://d.hatena.ne.jp/hnw/20120115
http://matomater.com/18784/
http://blog.asial.co.jp/1316
http://chiplus.net/2014/11/06/post-1300/

じゃこれは何だ?と今一度問うて
http://matome.naver.jp/odai/2139123528062735701/2139143210772374803
ほほう?fabpot/Goutte????
よくわかんないけど、fabpot とは公開してる人の名前だったw
https://github.com/FriendsOfPHP/Goutte
なーるほど@@;

でこっちはGitHub での公開
https://github.com/FriendsOfPHP/Goutte
ふむふむ

これはどう使えと??っと考えてみてると
とあるサイトには.phar 拡張子をphp で読み込めば
PHP に内部実装してあるPhar が動くからOKって記事がちらほら
Phar は
http://qiita.com/rana_kualu/items/4b2ef7bfff83939d7ef5
http://sasezaki.hatenablog.com/entry/2012/02/09/002416

でもでも・・・・実は私がGitHub を見たときには
removed phar support の文字が・・・
つまりPhar圧縮しての公開はしないっぽいです。
http://dondoko.hateblo.jp/entry/2014/09/06/113027
ここでも
「goutteはいろんなコンポーネントを使用して構成されているらしく、
最新のgoutte.pharはそれらがまとまっていたのだが。
goutte1.0.6にはgoutte単体しかなく、そのかわりcomposer.jsonが置いてあった。」
とある。


圧縮してあると、中身のバージョンアップ、面倒なのかな?とか、
中身にウイルスとか入ると困るからかな?とか、いっぱいなんか
考えられるし、そういう系統(Pharの問題)のブログもネット検索で
あった。

Composer の問題
http://co3k.org/blog/composer-replace-security-bug-has-been-fixed
http://dqn.sakusakutto.jp/2014/07/php_composer_require-dev.html
なんか読めば、
「まずはお使いのすべての Composer を self-update サブコマンドで更新しましょう。」
らしい。
それをすればOKとかなんだろうか?

自分でPharアーカイブ作るのはまだ対策後ならいいけど、
むしろそれだけでなくてPhar のファイルをダウンロードをむやみにするな!って
事なんじゃないだろうかと。

で、話は変わってComposer は、Linux のパッケージ管理みたいに、
指定のパッケージをダウンロードして、ファイルとフォルダの構成を
ある型に従ってしてくれるっぽい(今頃説明かっ!)。

説明によるとPHP の依存管理ツールらしい
http://9ensan.com/blog/programming/php/php-composer-cli/

Composer の使い方としてこっちもあった(勝手に日本語)
https://kohkimakimoto.github.io/getcomposer.org_doc_jp/doc/01-basic-usage.html
本家
https://getcomposer.org/download/
Composer の公開は、
安定版 => dist => –prefer-dist オプション
開発最新版 => source => –prefer-source オプション
らしい。

他にもなんかいっぱい
http://laravel.hatenablog.com/entry/2013/11/18/004325
http://www.ryuzee.com/contents/blog/5681
その他のその他
http://qiita.com/notona/items/c5a087d8dd446d315e6e
http://qiita.com/masarufuruya/items/23131a465b7e9c8f3060


Windows Installer っていうWindows 用があったので
https://getcomposer.org/download/
にComposer-Setup.exe 
というのがあったので、これを落としてインストールしたら、
PHPのphp.exe のパスを尋ねられる部分で自動でphp.exe のパスが
私の場合は入っていた。

Windows のウィンドウ説明付きはこっちにあった
http://qiita.com/mikoski01/items/266469535e860312145d

これでインストールすると、私の場合path が、環境変数に
「C:\ProgramData\ComposerSetup\bin」
と追加された。
インストーラーの実態は、
「C:\Program Files (x86)\ComposerSetup」
だった、右クリックでJSON を選択した時に、Windows ならば
インストールできるという機能もつくけど、JSONだと、どんなJSONでも
表示されちゃうから、嫌な人はインストーラー使わない方でもいいかも。

後、PHP のパスを聞いてきているので、PHP を通す設定を
私の場合は手動でpath に書いているけど、「C:\PHP-x.x.x」とか
これらもしているから、再起動後、簡単に動いたのかもしれない。

どうであっても、実態は、php.exe で、composer.phar に引数、
例えばinstall をつけて実行しているに過ぎないのが分かる。

installディレクトリには、composer.bat があって、中身に1行
「@ECHO OFF php "%~dp0composer.phar" %*」とあるだけ。
同じディレクトリにcomposer.phar が存在する。

本当に面倒だと思うならば、PHPのpath 通ってる様になら、
php のフォルダに入れちゃってもいいんじゃないかなと。

ここででは、戻って本題のGoutte をダウンロードしてみた。
https://github.com/FriendsOfPHP/Goutte
にある
https://github.com/FriendsOfPHP/Goutte/archive/master.zip
これをダウンロードして展開すると
諸々のファイルと、必要なライブラリダウンロード構築用の
composer.json
が見つかる。

私の場合はWindwos に右クリックの機能を入れちゃったので
そこからinstallを選んで終ってしまった。
手動でも composer install
と、composer.json が展開されたフォルダに移動して
打ち込めば、composer のパスが通ればそれで終る。

さっき言った面倒だから!って人は、php.exe がある場所に
composer.phar を置いて、php.exe のある場所のpath だけを
通しておいて、php.exe composer.phar install とかでいいんじゃないかな?

それでこれが結果


 
Command: composer install
 
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing symfony/dom-crawler (v2.7.1)
    Downloading: 100%
 
  - Installing symfony/browser-kit (v2.7.1)
    Downloading: 100%
 
  - Installing symfony/css-selector (v2.7.1)
    Downloading: 100%
 
  - Installing guzzlehttp/promises (1.0.1)
    Downloading: 100%
 
  - Installing psr/http-message (1.0)
    Downloading: 100%
 
  - Installing guzzlehttp/psr7 (1.1.0)
    Downloading: 100%
 
  - Installing guzzlehttp/guzzle (6.0.2)
    Downloading: 100%
 
symfony/browser-kit suggests installing symfony/process ()
Writing lock file
Generating autoload files
 
C:\Apachex.x.x\htdocs\goutte_composer_project\Goutte-master>
(私の場合のパスです)

これでめでたし! と思ったら、
なんかPhar になってない事に気がついて
気になって仕方ない・・・・

確かにPhar でなくても動くけど気になる。

うーん・・・と思って気がついたのは、
同じCoutte のディレクトリに「composer.json」とは違う名前で
box.json」っていうのが存在する・・・

これを色々調べてみると、これがPhar アーカイブを作るためのJSONらしい。
http://qiita.com/morishitter/items/d6401176d99953cce4da
http://qiita.com/iwai/items/2c65273a6640c7b3fec2
本家
http://box-project.org/
GitHub
https://github.com/box-project/box2-lib
これ、言い方がよくわからない
たとえるならば、
BOX が本名で、型式がbox2-lib でアドレスなどではbox2 と略して使われる。
型式の方が一般的に通用する名称?みたいなたとえ話で、人には通じるのだろうか?w

まぁ、とりあえずボックスさんが必要です^x^;

それの中身は普通にPHP でした。
https://box-project.github.io/box2/installer.php
コピペでもいいかもしれない・・・
でも、
公式には
$ curl -LSs https://box-project.github.io/box2/installer.php | php
って書いてあるね・・・

でこれ、実は多分、Windowsインストーラーないですからw

もう、Windows にインストーラーで入れちゃって
Composer と一緒でいいなら
「C:\ProgramData\ComposerSetup\bin」
に入れておけば、パス通るしw
気になるなら別にフォルダ作って、環境変数のPath 作ればいいんだろうな?って感じでした。

必要なコンポーネント集めるには公式みてると
$ composer global require 'kherge/box=~2.4' --prefer-source
Composer が必要みたい!

それでビルドは
$ box build -v
とかでいいのかも。

これ、メモなので、BOX辺りから、自分で試してないので、
間違ってたら、後日でも修正します!(多分)


他、リンク
Goutte内部で使われるSymfony2の~~~
http://blog.asial.co.jp/iphone/756
Composer の
http://codezine.jp/article/detail/7827

「Goutte」と「phpQuery」を比較
http://qiita.com/ka215/items/79c30e9c15ae0462f457

これも「Goutte」と「phpQuery」比較
http://ka2.org/compared-to-goutte-and-phpquery-of-scraping-library-for-php/

Goutte vs. Simple HTML DOM Parser
http://qiita.com/soarcreator/items/56a971d42b8b640b76a6

PHP コードをコーディング規約に沿うよう修正してくれるツール 「PHP CS Fixer」
これもComposer でパッケージ管理されていて取得できるっぽい
http://fivestar.hatenablog.com/entry/2014/12/08/033345
https://github.com/FriendsOfPHP/PHP-CS-Fixer

テストの作成をしてテストできるみたい
http://fuelphp.caph.jp/articles/tag/goutte/

Symfony2の機能テストと基本的に同じ
http://qiita.com/77web@github/items/3cd3b56985d5c6845661

Goutteでコントローラーテスト
http://kinjouj.github.io/2012/12/fuelphp-24-goutte-controller-testing.html

似て非なる何か、でも参考「Behat」
http://blog.moccori.com/d/2013-05-27

DomCrawlerコンポーネント(symfony2)
http://docs.symfony.gr.jp/symfony2/components/dom_crawler.html

質問関係
http://q.hatena.ne.jp/1408766188
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12134822307
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13142533538
http://ja.stackoverflow.com/questions/6485/goutte%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0

この人はGoutte使おうと思ったらイケてなかったらしい
http://qiita.com/peka2/items/108da70e2df9be75ac49

これ本格的
別々のGoutte\ClientにCookie情報を引き継いで渡したい
http://skgckj.hateblo.jp/entry/2015/02/04/091724

Goutteを使って
http://kkkw.hatenablog.jp/entry/php/scrape-with-goutte

英語だけど
http://incarnated.net/blog/scrape-web-goutte

How to simulate javascript support?(英語だけど質問)
https://github.com/FriendsOfPHP/Goutte/issues/175

How to use Goutte(英語だけど質問)
http://stackoverflow.com/questions/15628926/how-to-use-goutte

ではメモでした<_ _>

拍手[0回]


No Image

jQuery のvalidate.js でformat 関数の使い方いはまった

JavaScript の調べ物

今回はjQuery のフォームチェック(バリデーション)のプラグインである
validate.js の話

validate.js はブラウザ上でフォーム入力をチェックするものであるが
細かく思ったより設定して使う事が可能である

例えば、remote() を遣うと、
フォームの入力をそのまま指定のAPIサーバー(サーバーサイドプログラム)に
内容を送り付けて、サーバー上のDBなどや、リアルタイムな処理を用いて
フォームの入力チェックが有効かどうかを知る事ができる(自分へのメモなんですけどね^^;)

さて、今回はこのvalidate.js のformat() です。

これをネット上で使い方の参考を見ていると
例えば
$.validator.format("{0} is not a valid value");
とか
jQuery.format("{0} is not a valid value");
とか
なんだけど、これだとなぜかうちの環境で動かない!!(’Д’#)
理由が分からないから、そもそもこのformat() は、何処から継承されてるの?
と思って調べたら普通にvalidate.js に実装されている機能っぽい
http://jqueryvalidation.org/jQuery.validator.format/

それには
Example:
の部分に
jQuery.validator.format("{0} is not a valid value");
と書いてあるのでその通りに書いてみた。

すると。。。。動いた^w^;

うーん・・・・
よくある、よくあったら困る様な固有な書き方とか、
何かを回避する為に、$やQuery って書く書き方をしてるのだろうか?

不思議だけど、平然とどのサイトもその様に書いている・・・

私の場合には、
jquery-1.11.2.min.js

jquery.mobile-1.4.5.min.js

jquery.validate.1.13.1.min.js
を順に読み込んで使っていた環境での出来事

特に何かした覚えはないんだけどな・・・

普通に考えてそうだと思うけど、人のサイトの多くで
jQuery.validator
とは書いてない

あと私の環境では、試しに書いたjQuery を$ にした
$.validator.format("{0} is not a valid value");
でも動いた

なんだろう、みんなどうしてそんな書き方しちゃってるんだろう・・・

私の使い方が悪いのか?w

なんだろう、なんだろう・・・なんだろう・・・どうしてなんだろう・・・・


そのうち分かる日が来る・・・のかもしれないw

因みに私は勿論json で設定しているので
使っている部分のサンプルは、
フォームの郵便番号に対しては下記の様にしています(他の部分は紛らわしいので載せてないよ!)
{
rules: {
zipA :{
required: true,
minlength: 3,
maxlength: 3,
digits: true
},
zipB :{
required: true,
minlength: 4,
maxlength: 4,
digits: true
}
},
messages: {
zipA :{
required: "郵便番号上3桁は必須です",
minlength: jQuery.validator.format("{0} 文字以上を入力してください"),
maxlength: jQuery.validator.format("{0} 文字以下を入力してください")
},
zipB :{
required: "郵便番号下4桁は必須です",
minlength: jQuery.validator.format("{0} 文字以上を入力してください"),
maxlength: jQuery.validator.format("{0} 文字以下を入力してください")
}
},
errorPlacement: function (error, element) {
error.appendTo(element.parent().parent().last());
}
// ,
// submitHandler: function (form) {
// $(':mobile-pagecontainer').pagecontainer('change', '#success', {
// reload: false
// });
// /* サンプル */
// $('body').pagecontainer('load', 'change_linked.html');
// return false;
// }
}


フォームのinput でminlength="x" maxlength="x" としておけば、HTML5 の処理で
Chrome で確認した限り、思った通りに動いてました
(この場合ではx は3 か4 という事になります)

毎度ながら個人的なメモでした<_ _>







拍手[1回]


No Image

PHPでOS判定時に用いるディレクトリの指定セパレータはWindows で大凡常に「\」 でなく「/」(__FILE__は例外orz)

PHP の調べ物

正規表現で、ファイルのパスを置換していて気が付いたφ(..)メモメモ

なんだかWindows でもディレクトリを示すセパレートする文字が
「\」じゃなく「/」なんじゃないかな?なんて思えてきた

なぜかDIRECTORY_SEPARATOR っていう定数が使えない

var_dump($_SERVER);
をしてみる。

この中でWindows のパスを睨めっこ

あれ?
Windows の環境変数 PATH だけ
 'PATH'' => string 'C:\~~~
となっていて

スクリプトの名前は
 'SCRIPT_FILENAME' => string 'C:/~~~
となっている
という事は、PHP上は全て 「/」で扱えば良いのか?!(追伸を見て・・・w)

正規表現などで思わずDIRECTORY_SEPARATOR という定数を
使うと、Windows はDIRECTORY_SEPARATOR  が「\」でヒットしない場面がパスだと多い!
うーん、なんだかなぁ^^;
という事で、PHP上でパスを使う場合には、大凡「/」で良いみたいだ
せっかくDIRECTORY_SEPARATOR  を見つけて厳密性を!と思ったけど 厳密にPHP でのパス取得は「/」だったというおちでしたorz
なんか正規表現がうまく動いていない原因が分かってホッっとしましたとさ@x@
φ(..)メモメモでした
---------------
追伸です!!!
echo __file__;
をWindows ですると
C:\~~~ なんですorz

なんでこれだけ「/」 じゃなく「\」 なのか・・・

系統が違ってもディレクトリのパーサー記号は統一してほしいものです・・・・
と言うか選択できるのかな?
多分今のところ?出来ないかな・・・・
うーーーーん・・・・

Windows のコマンドラインで直接使うのならば「\」がいいし、
PHPだけなら「/」がいい 出来れば選択式にして欲しい・・・・w

拍手[0回]


No Image

PHPで関数名を引数にとる関数 って簡単に作れるじゃんって話^w^;

PHP の調べ物

なんだか関数に引数を取るPHPの関数はコールバック関数として
いくつか存在しています。

それらの関数を使わないと、
例えば関数magicFunc()の引数に関数の名前runFuncを入れて、
magicFunc('runFunc')として
その関数の中で
runFunc を実行できないのか?と考えました。

これ、すんなり出来るんです^w^;

なんじゃそりゃ!?wwwと思ったのでφ(..)メモメモしました(PHP5.3.5くらいですw)。

function runFunc($valArray){
    
var_dump($valArray);
}

function 
magicFunc($funcName,$valArray){
    
$funcName($valArray);
}

magicFunc('runFunc',array('て','す','と'));


これをすると

array
  0 => 
string
 'て' (length=3)
  1 => 
string
 'す' (length=3)
  2 => 
string
 'と' (length=3)
なった@w@;

つまり、引数で渡した変数と化した関数名が入った値を、
そのまま()を付けて関数っぽく使うと、
それがそのまま関数になるのですね!!!

おぉ!えくせれんと(謎

という事で、もしも引数の数なども判断した関数を作りたければ
PHP5.6 からはunctions.variable-arg-listにある
可変長引数リストが非常に便利ですがそれ以前(5.5)な場合は
func_num_args()func_get_arg()func_get_args() 
を使えば何でも作れそうです。

後、引数名が入った引数も$を一つ多く書いて$$で名前の変数を参照できるので
$sole='heart is power';
$body='sole'

としておいて
var_dump($$body);


string
 'heart is power' (length=14)
と参照できるので、もっと出来る事は広がりますd^v^b

面白そうなφ(..)メモメモでしたぁ~

お粗末<_ _>

拍手[0回]


[PR]