2016年12月18日日曜日

phpで指定したURLのファイルの最終更新日時を取得する方法

サンプルコードは以下の通りです。

ソフトバンクのバナー画像(http://m.online-shop.mb.softbank.jp/mobile/set/common/p/img/int_inc/special/logo-white.png)の最終更新日時を取得するサンプルです。

// ソケット接続開始(引数にはurlとポートを指定)
$fp = @fsockopen("http://m.online-shop.mb.softbank.jp", 80);

if (!$fp) {
    return false;
}

$request = 'GET ' . "mobile/set/common/p/img/int_inc/special/logo-white.png" . " HTTP/1.1\r\n";

// もしベーシック認証が存在する場合は、以下のように指定する
//  $request .= 'Authorization: Basic ' . base64_encode($user . ':' . $pass) . "\r\n";

fwrite($fp, $request);
fwrite($fp, 'Host: http://m.online-shop.mb.softbank.jp\r\n');
fwrite($fp, "Connection: Close\r\n");
fwrite($fp, "\r\n");

while (!feof($fp)) {
    $buf = fgets($fp, 4096);
    if (preg_match('/^([^:]+):(.+)$/', $buf, $matches)) {
        $name  = $matches[1];
        $value = trim($matches[2]);
        if ($name == 'Last-Modified') {
            // 最終更新日時を取得する
            $lastModified = $value;
            break;
        }
    }
}
fclose($fp);

2016年12月14日水曜日

phpのcurlでリモートの情報を取得しようとしたら、「Peer certificate cannot be authenticated with known CA certificates」になりました。

Peer certificate cannot be authenticated with known CA certificates
の解消方法、
エラーとなったのは、HTTPS証明書を信頼するように設定されているからです。

テスト環境なので、そのを無視するように設定すれば解消できます。

以下の一行を追加


//下記一行を追加
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false);

apacheサーバ、すべてのリクエストをindex.phpに処理させる設定

テストサーバを作っています。
とりあいず、すべての処理を一旦index.phpに集約したいです。
その設定方法を調べてみました。
以下の設定を入れれば(<VirtualHostxx<の中に
)、目的を達成できました。
忘れないため、メモです。

RewriteEngine on
RewriteRule ^.+$ /index.php [L]

2016年12月10日土曜日

mongoDBによく使うコマンド一覧

mongoDBによく使うコマンド一覧

項目コマンド説明
接続mongo localhost:20000/shop -u owner -p
show DBshow databases
show コレクションshow collections
DB選択use DB名
index確認db.コレクション名.getIndexes()
find全件db.コレクション名.find()
検索db.コレクション名.find({"検索フィールド":検索値})JSON形式
limitdb.コレクション名.find().limit(1)
offsetdb.コレクション名.find().skip(1)
sortdb.コレクション名.find().sort({"hoge":1})昇順
sortdb.コレクション名.find().sort({"hoge":-1})降順
countdb.コレクション名.find().count()
キーがあるもののみdb.コレクション名.find({"key":{$exists:true}})
結果の整形db.コレクション名.find().pretty()
階層検索db.コレクション名.find({"key.nested.value":"hoge"})データは下記のような時
{"key":
{"nested":
{"value":"hoge"}
}
}
更新db.コレクション名.update({クエリ}, {$set:{更新内容}})
切断exit
collection作成db.createCollection("コレクション名")
DB削除use DB名
db.dropDatabase()
消したいDBを選択してから
コレクション削除db.コレクション名.drop
インデックス確認db.コレクション名.getIndexes();
インデックス作成db.コレクション名.ensureIndex({"フィールド名":1})

PHP 配列Aから配列Bに存在する要素を取り除く方法

もちろんロープ処理で一つを見ていく方法がありますが
一番簡単なのはPHPの関数array_diffを使うことです。

例:
<?php
$array_a 
= array("111""222""3444""5555");$array_b = array("222""5555");$result array_diff($array_a$array_b);
print_r($result);?>
出力は次の通りです。
Array
(
    [1] => "111",
    [2] => "3444"
)

2016年12月7日水曜日

Google sheetの行を固定される方法

google sheetでデータをソートしたら、ヘッダー行も一緒にソートされてしまいました。

ヘッダー行をソートされないようにするには、まずヘッダー行を固定しなければなりません。

行を固定される方法は、

まず固定させた行を選択して、そしてメニューの「表示」をクリック、「固定」の「現在の行(1)まで」を選択します。
以下の図のようにすれば、一行目は固定されることができます。
 
 



証明書インストールできない問題

IEで証明書エラーになりました。

インストールしようとしたら、インストールボタンが表示されてない
以下の図のように、「証明書をインストール」を表示されるべきのボタンが出ない

色々修正変更をしたり、調べたりしても問題はわからなかった。、

最後ふっと思いづいたのは管理者権限でIEを立ちなおしたら、無事に問題を解消できました。

2016年11月18日金曜日

コマンドでmemcachedの操作

コマンドでmemcachedに保存している情報を確認したい時に使うコマンドを纏めてみました。
1、まずmemcachedのサービス確認する
  $ service memcached status
memcached-11211 (pid  2042) を実行中...
memcached-11511 (pid  2049) を実行中...
memcached-11911 (pid  2057) を実行中...
memcached-21211 (pid  2066) を実行中...

 4つのポートで動いてることを確認できました。

2、次にmemcachedの再起動
    $ service memcached restart

3、memcachedに接続する
例: ポート21211に接続する
$ telnet 127.0.0.1 21211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

4、itemsを確認する
 stats items
STAT items:5:number 1
STAT items:5:age 5905
STAT items:5:evicted 0
STAT items:5:evicted_nonzero 0
STAT items:5:evicted_time 0
STAT items:5:outofmemory 0
END

5、itemsのキーを確認する
例5番に保存されているキーを確認する
stats cachedump 5 1
ITEM app_445736_user_10003168 [98 b; 1479436409 s]
END

6、とあるキーの値を確認する
get app_445736_user_10003168
VALUE app_445736_user_100031681000 6
test data
END

2016年11月11日金曜日

vimで特定な行数に移動コマンド

vimで特定な行数に移動コマンド:

G 最後の行に移動
1G 一行目に移動
20G 20行目に移動

2016年11月9日水曜日

正規表現 ある文字を含まない行を検索 と 空行を検索

正規表現で、ある文字を含まない検索は以下の通りです。
例:「key」を含まない
  ^(?!.*key).+$


空行の検索方法は以下の通りです。
^\r\n

2016年11月8日火曜日

linuxあるフォルダのファイル一覧を表示 子フォルダも含む

linuxあるフォルダのファイル一覧を表示 子フォルダも含む

find /dir -type f -follow -print
-type f ファイルを出力を意味します。
-follow シンボリックの参照先も検索します。
-print ファイル名を出力する

2016年11月6日日曜日

php日付から月を取得する方法

カレント時間から月の取得するには以下の三つ方法があります。
date('M') 
date('n') 
date('m')

とある文字列から月の取得方法は以下の通りです。

$mydate = "2010-05-12 13:57:01";
$month = date("m",strtotime($mydate));

php Laravelで実行されたSQLを取得する方法

Laravelの「$query->toSql()」で実行されたsqlを見ることができますが、その方法で引数を見えないです。
代入した引数も見える方法はありますか。

調べたところ、queryを実行した直後に、「DB::getQueryLog()」でsqlも、代入した引数も見ることができます。

具体的に使い方は以下の通りです。

1、まず、ファイルの先頭に、以下を追加:
  use DB;
  
2、queryの実行前、以下を追加
  DB::enableQueryLog();

3、queryの実行直後に、実行されたsqlを取得することができます。
  
 DB::getQueryLog()


ステップ2と3を合わせた例です。↓

    DB::enableQueryLog();
            
            $result = $query->count();
    dd(DB::getQueryLog());

2016年11月4日金曜日

「httpd は停止していますがサブシステムがロックされています」の対策方法

今日「sudo service httpd start」を押したら、以下のエラーができました。

httpd は停止していますがサブシステムがロックされています

どうやっら起動できなくなりました。

googleしたら、ファイル「/var/lock/subsys/httpd」を削除して、再び「sudo service httpd start」を実行して無事に動いてくれました。

たまたま何かの問題で、「/var/lock/subsys/httpd」 が残ったままhttpdが停止してしまったようです。

2016年10月23日日曜日

mongo dbに新しいユーザーを追加する方法

mongo dbに新しいユーザーを追加する方法:
1、まずユーザー一覧を確認します。

use admin;
db.system.users.find();
{ "_id" : "admin.selector", "user" : "selector", "db" : "admin", "credentials" : { "MONGODB-CR" : "1c4715405e220adc28bd75e8c71ff741" }, "roles" : [ { "role" : "read", "db" : "admin" } ] }
{ "_id" : "admin.updator", "user" : "updator", "db" : "admin", "credentials" : { "MONGODB-CR" : "f67c7e31eacd78db5689f38c04120f13" }, "roles" : [ { "role" : "readWrite", "db" : "admin" } ] }
2、新しいユーザーを作成します。
    ここに注意してほしいのは、作成する前対象データベースを選択しておく必要 例えば、productというデータベースに対して、selectorユーザーとupdatorユーザーを作成したい場合は、 以下のコマンドを実行します。
use product;
db.createUser({user: "selector", pwd: "Ln5GCPfB", roles: [{role: "read", db: "product"}]}); 
db.createUser({user: "updator", pwd: "Ln5GCPfB", roles: [{role: "readWrite", db: "product"}]});

Laravelで画像処理ライブラリIntervention Imageを使えるまでの流れ

Thumbnailの作成、画像のサイズ変更など様々な機能が有するライブラリIntervention Imageを自分の環境で使えるまでの流れをメモしていきたいと思います。

1、まずPhpの拡張モジュールGDをインストールしておき必要があります。
    コマンド、「php -i | grep gd」で自分の環境がphp-gdインストールされたかとかを確認します。

  もし何も表示されなかったら、以下の手順でphp-gdをインストールしてください。  
  
  以下、php-gdのインストール方法:
  ① 「yun list | grep gd」でインストールできるphp-gdパッケージを確認します。
     自分のphpバージョンに合うパッケージを選びます。
    例え自分のphpバージョンは5.6の場合は、
    以下のコマンドでphp-gdをインストールします。
   yum install php56-php-gd.x86_64 --enablerepo=remi

  ② インストールしたパッケージをphpが見えるように設定
    remiでインストールしたパッケージはデフォルト以下の場所に配置されます。
   /opt/remi/php56/root/usr/lib64/php/modules/gd.so
    
    php.iniファイルがパッケージをロードできるように、以下コマンドでシンボルリンクを作成しておきます。
     ln -s /opt/remi/php56/root/usr/lib64/php/modules/gd.so /usr/lib64/php/modules/gd.so

    ③ 最後「/etc/php.ini」に以下を追記して、NginxかApache(sudo service httpd restart)を再起動します。
      extension=gd.so
※時にはApacheを再起動しても反映されない時があります。PCを再起動すれば大体問題がなくなります。
    
2、 「composer.json」ファイルに、「"intervention/image": "dev-master"」を追加
   例:

"require": {
"laravel/framework": "5.1.*",
"intervention/image": "dev-master"
}

3、以下のコマンドを実行します。
  $ composer install
4、config/app.phpファイルを開いて、$providers arrayのところに、以下を追記
  Intervention\Image\ImageServiceProvider::class,
5、config/app.phpファイルの$aliases arrayのところに、以下を追記
  'Image' => Intervention\Image\Facades\Image::class,
6、最後念のため、以下のコマンドも実行します。
  $ composer update

2016年10月22日土曜日

php laravelでアップロードしたファイルの名前と絶対パスの取得方法

phpのlaravelで、UploadedFileからアップロードしたファイルの絶対パス($_FILE['tmp_name'])の取得方法は?

UploadedFileを見ると、以下の情報が見れます。

array(
       'test' => false,
       'originalName' => 'triangle-in-the-mountains.jpg',
       'mimeType' => 'image/jpeg',
       'size' => 463833,
       'error' => 0,
)
phpのように、$_FILE['tmp_name']を取得したい時があります。

その時、「getRealPath()」を使えば、アップロードされたtmp_nameを取得することができます。

「$uploadedFile->getRealPath();」で「/tmp/php5Wx0aJ」のような結果を得られます。

もちろん、getFilename() と getPathname() も使えます。

最後補足、「UploadedFile」ファイルはphpの「File」を継承しています。

2016年9月30日金曜日

java seleniumでinput テキストボックスの値をクリアする方法

たまに<input type="text">要素の値をクリアしたいときがあります。

クリアする方法は以下の二種類があります。

① element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "");
  上記のコードを簡単に説明:まずテキストを前選択、そして空の文字をリプレースします。
  もちろん以下のコードも効きます。
  element.sendKeys(Keys.HOME,Keys.chord(Keys.SHIFT,Keys.END),"");
②  element.clear()
  element.sendKeys("Some text here")
  方法二はとても理解しやすいと思います。単純にクリアしてから自分が入れたい文字を入れればいい



2016年9月13日火曜日

Error: Selection does not contain a main type

今日はmavenのプロジェクトを新規作成して、Hello World!を動がしてみたら、こんなエラーが出ました。

Error: Selection does not contain a main type



解決方法は、プロジェクトを選んで、右クリック、メニューから「Build Path --> Use as Source Folder」をクリックします。

2016年9月8日木曜日

Cygwinの文字化けの解消方法

ソースコードは全部eucJPとなっていて、
Cygwinで見ると全部文字化けしてしまいました。
コマンドの実行結果も全部文字化け。

試しにCygwinエディターの文字コードをeucJPに変更じてみましたが、
買改善されなかった。

最後以下のコマンドを実行したらやっとなおってくれました。
 export LANG=ja_JP.eucJP

最後自分のバッチ設定ファイルにも追加しておくと便利だです。

vi ~./batch_profile

2016年8月29日月曜日

linuxコマンド file1にある、file2にない行を抽出する方法

例えばfile1に以下の内容があります。
line1
line2
line3

file2に以下の内容があります。

line1
line4
line5
file1にある、file2にない行を抽出したい。つまり次の結果が期待しています。

line2
line3

次のコマンドを使えば、目的を果たせます。file2とfile1両方そーと済み
grep -v -f file2 file1


2016年7月2日土曜日

chrome plugin開発時に、console.logの出力方法

アドレスバーに、以下を入力してアクセス
chrome-extension://ID/popup.html
 開いたら、後他の通常画面と同じくdebugツールを使えばconsole.logの出力が見えます。

2016年7月1日金曜日

Protractorでセッションをクリアできないときの対策

以下のスクリプトでセッションをクリアしてみたら、
browser.executeScript('localStorage.clear();');
 思うようにクリアしてくれない、

 理由はpageちゃっとロード完了できていなかったみたい

以下のソースを使えばその問題を解消できます。



  function getWindowLocation() {
    return window.location;
  }

  function clearStorage() {
    window.sessionStorage.clear();
    window.localStorage.clear();
  }

  return browser.executeScript(getWindowLocation).then(function(location) {
    // NB If no page is loaded in the scneario then calling clearStorage will cause exception
    // so guard against this by checking hostname (If no page loaded then hostname == '')
    if (location.hostname.length > 0) {
      return browser.executeScript(clearStorage);
    }
    else {
      return Promise.resolve();
    }
  });

2016年5月27日金曜日

Postgresqlでselect結果をファイルに出力する方法

Postgresqlでselect結果をファイルに出力する方法は三つがあります。

方法1、psqlコマンドを使う
    psql -d dbname -t -A -F"," -c "select * from users" > output.csv
方法2、postgresのcopyコマンドを使う
    COPY (SELECT * from users) To '/tmp/output.csv' With CSV;
方法3、psql対話的なコマンドで出力する
  >psql dbname
    psql>\f ','
    psql>\a
    psql>\o '/tmp/output.csv'
    psql>SELECT * from users;
       psql>\q