インターネットの話」カテゴリーアーカイブ

PHPで思うようにsleep()が動作しない

2020年6月12日

30日分の安い宿一覧を、楽天APIのデータを使って表示するPHPプログラムを製作していたのですが、一部の処理を手動にしていたのを全自動で更新できるようにしました。

その際、処理内容を画面で確認するために、途中で処理結果の表示を持続したかったのですが、処理を指定した時間だけ止めるsleep()が効かないんです。

随分頑張って、試行錯誤したのですが解決できず、最後に頼るのはYAHOO!知恵袋です。

原因は、時間がかかる処理をした場合、ブラウザの仕様でバッファをフラッシュするためのようです。
echoコマンドを実行した後に
@ob_flush();
@flush();
を挿入して、その後に
sleep(40);
を挿入すると画面表示した後に、表示を一定時間(今回の場合は40秒)停めて、その後に新しい処理に移る事ができるようになりました。

これで、30日分の最安値宿一覧を、更新内容を確認しながら全自動で更新できるようになりました。やったね。

2020年6月14日

40秒停めても、画面を見続けないといけない事が面倒なので、表示以後の別ウインドウでさせたほうが便利だと気づきました。
PHPで新しいウインドウを開くのが難しく、Javaスクリプトを使わなければいけない事がわかり、実際に試したのですが、うまく動作しませんでした。
結局、アップロードする前に<form   target=”_blank”>で希望通りの処理ができることが分かりました。これだと表示を一定時間(今回の場合は40秒)停止も不要になります。

<body onload=”document.all.jikkou.click();”>
<form action=”https://kimassi.net/insert25.php” method=”post” target=”_blank”>
<input type=”hidden” name=”up_file” value=”<?= urlencode(file_get_contents(‘../../../data/output/csv-put2.csv’)) ?>”>
<input type=”submit” value=”up” name=”jikkou”>
</form>
</body>



金沢の安い宿のページのSEO対策

2020年5月22日

「きまっし金沢」に「金沢の安い宿」というページがあるのですが、以前はGoogle検索で一番最初に表示されていたのですが、最近ではGoogle検索から完全に外されています。
「金沢の安い宿」のページは、オリジナルのマップ(宿名のところをクリックすると該当の宿の情報に飛ぶ)もあるし、宿一覧もあって、おのおのの宿の必要最小限の情報(公式サイトへのリンクも含む)やオリジナルの画像も掲載されています。
それに加えて、30日間の最安値の宿とその価格も掲載されているので、かなり強力なページだと自負しています。
そのページがなんで、Google検索から完全に外されているのか、原因は判っているのです。
各宿から、アフィリエイトで楽天トラベルのページへのリンクを入れてあるからなんです。
最近のGoogle検索では、アフィリエイトのリンク数が多いページは一番嫌われているようなんです。
50以上もアフィリエイトのリンクコードを入れてあれば、嫌われるはずです。

そこで、作戦を考えました。「金沢の安い宿」のページからアフィリエイトのリンクコードを全て削除して、フレーム内のPHPページの30日間の最安値の宿とその価格一覧で宿名にアフィリエイトのリンクコードを埋め込むという作戦です。
30日間の最安値の宿に表示されるの宿はせぜい、10個程度なので、PHPでアフィリエイトのリンクコードを埋め込むのは、それほど難しい事では無いと思うのです。
フレーム内のPHPページは、「金沢の安い宿」のページ本体とは別ページ扱いになるので、「金沢の安い宿」のページはアフィリエイトは無いという事になり、SEO的には格段に強化されると思うのです。

2020年5月23日

さっそく変更しました。
データベースに宿ナンバーを登録して、最安値の登録が予想される12の宿の宿ナンバーの場合は宿名のかわりに宿名入りのアフィリエイトを表示するPHPプログラムに変更しました。
効果が表れると良いです。



「気づけばプロ並みPHP」でPHPの勉強を再開

2020年5月17日

PHPで金沢の安い宿の一覧のプログラムを改良したのを機に、PHPの勉強を再開しました。
購入したのは、「気づけばプロ並みPHP 谷藤賢一」です。「気づけばプロ並みPHP 谷藤賢一」には改訂版も出版されていますが、内容はセキュリティの増強があるだけで、ほとんど同じ内容です。

「PHPの絵本」でPHPの基礎を勉強し、「公開API活用ガイド (I・O BOOKS)」で楽天トラベル空室検索APIを使っての安い宿一覧の表示に使い、「よくわかるPHPの教科書  たにぐち まこと」「Bootstrapファーストガイド」でネット掲示板を作り、残りのPHPの主な利用用途はお店のショッピングカートということになります。
それで、お店のショッピングカートを作るのに役立つ本を探して見つけたのが、「気づけばプロ並みPHP 谷藤賢一」です。

ちょっと読んでみましたが、とても分かりやすいです。

同じ著者の「いきなりはじめるPHP~ワクワク・ドキドキの入門教室~  谷藤賢一」も初心者用には良さそうなので購入しました。

1年のブランクでPHPの基礎も、すっかり忘れていたので、良い機会だと思います。

2020年5月19日

「いきなりはじめるPHP~ワクワク・ドキドキの入門教室~  谷藤賢一」を読んでみました。
2011年に書かれた本なので、WindowsXP、WindowsVista、Windows7などしかない時代なので、さすがに内容は古いです。それを考慮しても、参考になる良書だと思います。
PHPの本当に基本的な部分は詳細に説明されていませんが(そういうのは「PHPの絵本」がお奨め)PHPでMySQLやデータベースを使う際の基本的な部分が判りやすくピックアップされているので良いです。
サンプルソースが付いていると実際に動作するのか確認出来て良いのにと思います。

2020年5月20日

「いきなりはじめるPHP~ワクワク・ドキドキの入門教室~  谷藤賢一」を読んで、PHPで理解が浅い弱点が、判ってきました。

1.シングルクォーテーション「’」とダブルクォーテーション「”」の使い方の違い
2.<form> </form>から送られてきた配列変数(スクリプトのコード中どこからでも使用可)
$_POST[‘変数‘]
3.HTMLの入力・送信フォーム
<form method=”post” action=”submitボタンをクリックされた時の飛び先“>
<input type=”submit” value=”OK”>
</form>
4.<form> </form>内でフォームの送信時にユーザーが見たり変更したりすることができないデータの扱い
<input name=”入力欄の名前” type=”hidden” value=”渡したいデータ“>
渡したいデータが変数なら
<input name=”入力欄の名前” type=”hidden” value=”‘.変数.'”>
5.SQLの入力
INSERT INTO テーブル名 (フィールド名1フィールド名2フィールド名2) VALUES (“データ1“,”データ2“,”データ3“)
6.データベース接続
「いきなりはじめるPHP~ワクワク・ドキドキの入門教室~  谷藤賢一」では
$dsn=’mysql:host=ホストのアドレス;dbname=データベース名‘;
$user = ‘ユーザー名‘;
$password =’パスワード‘;
$dbh = new PDO($dsn,$user,$password);
$dbh ->query(‘SET NAMES utf8’);
になっていますが、
$dsn=’mysql:host=ホストのアドレス;dbname=データベース名‘;
$db = new PDO($dsn, ‘ユーザー名‘, ‘パスワード‘);
を使っています。
7.データベースエンジンにSQL文で指令を出す
「いきなりはじめるPHP~ワクワク・ドキドキの入門教室~  谷藤賢一」では
$sql=’SQL文‘;
$stmt =$db->prepare($sql);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC); //$stmtから1つずつデータを取りだす
になっていますが、
$stmt =$db->query(“SQL文“);
$result = $stmt->fetch(); //$stmtから1つずつデータを取りだす
を使っています。
.データベースの登録データを読み出す
SELECT * FROM テーブル名 WHERE 条件
.データベースからデータを全部受け取る
$sql = ‘SELECT * FROM テーブル名 WHERE 1’;
$stmt = dbh->prepare($sql);
$stml->execute();
10.$stmtからデータを順番に1つずつ取り出す
$rec = $stmt->fetch(PDO::FETCH_ASSOC);
それを表示するのは
print $rec[‘フィールド名’];
すべてのページを処理するには
while(1)
{
$rec = $stmt->fetch(PDO::FETCH_ASSOC);
if($rec==false)
{
break;
}
print $rec[‘フィールド名’];
}
$dbh = null;

「気づけばプロ並みPHP改訂版 谷藤賢一」も購入しました。
「気づけばプロ並みPHP 谷藤賢一」と比較して、「気づけばプロ並みPHP 谷藤賢一」旧版のほうが必要なければ、メルカリで売ろうと思います。安く買ったので、ほとんど持ち出しなしで売れると思います。



自動車のバッテリーが売れた

最近、自動車のバッテリーはネットで購入して自分で交換しています。
オートバックスとかのバッテリーって凄く高いんです。
ちゃんと仕様に合ったバッテリーを購入すれば、簡単に交換できます。
必ずマイナスターミナルから先に外し、次にプラスターミナルを外し、取り付ける場合は必ずプラスターミナルより先に取り付けるくらいが注意点です。取扱説明書にも書いてあります。

さてバッテリーを交換したら、今まで使っていたバッテリーを処分しないといけません。
でも心配ご無用です。バッテリーを購入してくれるお店があるんです。

株式会社プレシャス 石川県白山市乾町165 に持ち込んだら2個を1000円くらいで購入してくれました。国道8号線のすき家 8号白山乾店の裏にあります。



Androidスマートフォンとパソコンとのデータ移動

Androidスマートフォンのデータをパソコンに送ったり、パソコンのデータをAndroidスマートフォンに送ったりしたい場合って結構ありますよね。
定期的に使う場合は、MissingLinkというアプリを使って無線のままで送るのですが、そうでない場合は、有線でつないで送ることになります。でも結構、ストレージ(SDカードとか内部メモリ)とかに接続できない場合が多いです。

Huaweiのストレージを認識しない場合って多いんですよね。
HuaweiからHiSuiteというアプリもあるのですが、接続確認コードを入力しても認証できない場合が多く動作が不安定です。

今のところ、一番確実に接続できる方法は、最初にAndroidスマートフォンとパソコンが起動している状態で、有線でAndroidスマートフォンとパソコン接続します。
この段階で、パソコンの「Windowsシステムツール」 - 「PC」 でAndroidスマートフォンを全く検出できていない場合は、USB接続端子が不調か、USBケーブルが充電専用のものでないかを確認します。

Androidスマートフォンを認識できていて、パソコンからストレージ(SDカードとか内部メモリ)の中身が見れない場合は、そのままの状態で、「設定」 ー 「開発向けオプション」を開きます。
開発向けオプションが無い場合は、「設定」 ー[端末情報]-[ソフトウェア情報]とタップし、表示された[ビルド番号]を7回連続でタップすると「開発向けオプション」が現れます。
「設定」 ー 「開発向けオプション」ー 「USBデバック」をONにします。
その後、「設定」 ー 「開発向けオプション」ー 「USB設定」をクリックして充電のみを選択した後、「設定」 ー 「開発向けオプション」ー 「USBデバック」をONになっていることを確認して、もう一度「設定」 ー 「開発向けオプション」ー 「USB設定」をMTPに選択します。
この時点で、パソコンの「Windowsシステムツール」 - 「PC」でAndroidスマートフォンのフォルダをクリックすると、パソコンからAndroidスマートフォンのストレージ(SDカードとか内部メモリ)の内部が見れるようになります。