WEBお問い合わせフォームのお値段はいったい幾ら?

2020.01.17

Logging

WEBお問い合わせフォームのお値段はいったい幾らなのか?
堀江貴文氏はデジタルの値段は限りなくゼロに近くなると言っていたけど、無料のWEB申し込みフォームやお問い合わせフォームはある。自分もお問い合わせフォームの簡易的な物を作ってみましたのでファイルをアップしますね。

テンプレートエンジンとしてtwig3.0を使用しています、そのため動作環境はPHP7.2以上になります。ソースコードの可変は行って構いません、またこのソースコードの動作保証などは致しません。WEB担当者様が確認を行いバグ等があれば修正を行ってください。

尚、Composerでtwigをインストール済みという事が前提となります。また送信部分やエラー処理についてはご自身で機能の追加が必要となります。


サンプルページ
https://zip358.com/tool/request/

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>お問い合わせ</title>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"
        integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
        integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
        integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
        crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"
        integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"
        crossorigin="anonymous"></script>
    <script src="js/common.js"></script>
    <style>
        .jumbotron {
            background-color: #2bd4d0;
            color: #fff;
        }

        .btn-primary {
            color: #fff;
            background-color: #2bd4d0 !important;
            border-color: #2bd4d0 !important;
        }

        .input-group-text {
            background-color: #2bd4d0;
            border: 1px solid #2bd4d0;
        }
    </style>
</head>

<body>
    <div class="jumbotron jumbotron-fluid">
        <div class="container">
            <h1 class="display-4">お問い合わせ</h1>
            <p class="lead">必須項目を入力し送信ボタンを押してください。<br>DEMOのため送信はできません</p>
        </div>
        <div class="alert alert-warning" id="error_sendmail" role="alert">
        </div>
    </div>
    <form action="index.php" method="POST">
        <div class="container">
            <div class="row">
                <div class="input-group mb-3">
                    <div class="input-group-prepend">
                        <span class="input-group-text">お名前[必須]</span>
                    </div>
                    <input type="text" name="name" class="form-control" id="name" placeholder="name" value="{{name}}">
                </div>
                <div class="alert alert-warning" id="error_name" role="alert">
                </div>
                <div class="input-group mb-3">
                    <div class="input-group-prepend">
                        <span class="input-group-text">メールアドレス[必須]</span>
                    </div>
                    <input type="email" name="email" class="form-control" id="email" placeholder="name@example.com"
                        value="{{email}}">
                </div>
                <div class="alert alert-warning" id="error_email" role="alert">
                </div>
                <div class="input-group mb-3">
                    <div class="input-group-prepend">
                        <span class="input-group-text" id="basic-addon1">@</span>
                    </div>
                    <input type="text" name="twitter_account" class="form-control" placeholder="twitter account"
                        aria-label="twitter account" aria-describedby="basic-addon1" value="{{twitter_account}}">
                </div>
                <div class="input-group mb-3">
                    <div class="input-group-prepend">
                        <span class="input-group-text">お問い合わせ内容[必須]</span>
                    </div>
                    <select name="meun" class="form-control" id="exampleFormControlSelect1">
                        {% for selectop in meun_option %}
                        <option value="{{selectop.value}}" {{ selectop.value == selectoped ? " selected":"" }}>
                            {{selectop.name}}</option>
                        {% endfor %}
                    </select>
                </div>
                <div class="alert alert-warning" id="error_meun" role="alert">
                </div>
                <div class="input-group">
                    <div class="input-group-prepend">
                        <span class="input-group-text">コメント[必須]</span>
                    </div>
                    <textarea name="comment" rows="10" class="form-control" aria-label="コメント">{{comment}}</textarea>
                </div>
            </div>
            <div class="row">
                <footer class="blockquote-footer">
                    <small class="text-muted">
                        ご自由に記入ください。
                    </small>
                </footer>
            </div>
            <div class="alert alert-warning" id="error_comment" role="alert">
            </div>
            <button type="submit" class="mt-2 btn btn-primary btn-lg btn-block">送信する</button>
        </div>
    </form>
</body>

</html>
<?php
session_start();
require __DIR__ . '/vendor/autoload.php';
use Twig\Environment;
use Twig\Loader\FilesystemLoader;

$loader = new FilesystemLoader(__DIR__.'/templates');
$twig = new Environment($loader);
$meun_option = json_decode(file_get_contents("js/select.json"));

$form = ["name","email","twitter_account","meun","comment"];
$data = [];

if($_POST){
	foreach($_POST as $key=>$val){
		$_SESSION[$key] = strip_tags($val);
	}
}
if($_SESSION){
	foreach($_SESSION as $key=>$val){
		$_SESSION[$key] = strip_tags($val);
	}
}

foreach($form as $key => $val){
	$data[$val] = $_SESSION[$val]?$_SESSION[$val]:"";
}

extract($data);

print $twig->render('index.html.twig',["name"=>$name,"email"=>$email,"twitter_account"=>$twitter_account,"selectoped"=>$meun,"comment" => $comment,"meun_option"=>$meun_option]);

タグ

3.0, 358, 7.2, com, Composer, DOCTYPE, gt, html, https, lt, php, request, tool, Twig, web, www, zip, アップ, インストール, エラー, エンジン, お問い合わせ, コード, ご自身, サンプル, ゼロ, ソース, ため, デジタル, テンプレート, バグ, ファイル, フォーム, ページ, , 使用, 保証, 修正, 値段, 処理, 前提, 動作, 堀江貴文, 幾ら, 必要, 担当者, 機能, 無料, , 環境, 確認, 簡易的, 自分, 追加, 送信, 部分,

IT戦士の最終目標は上流工程からYOUTUBERメンターになっていく!?

2020.01.10

Logging

IT戦士の最終目標は上流工程からYOUTUBERメンターになっていく!?
自分はそう思っています、なぜならIT系のプログラミンスクールは
増えているものから、何れ無料でIT系プログラミンスクール同等の動画を
提供する人が出てくる。

本当はもうそういう人が登場しているけど、あまり知られてはいない?
例えばこのYOUTUBEチェンネルの方。
https://www.youtube.com/channel/UCsLPJEAgH-KUJE2WobcLZ0A

中級者から上級者向けの動画を提供していて登録者も増えていってます。
たぶん、この方は続けていけば動画のプログラミング解説だけで
安定した収入益を得ることが可能になると思います。

●これからのIT需要
いろいろな企業にIT部門が出来てくると思うので
自分が思うにITリテラシーは身につけて損はないと思います。

HTMLやCSSを勉強しなさいとは言わないけど、エクセルのVBA使いや
グーグルスプレッドシートなどを使いこなせると事務作業効率はぐっと
上がります。

今ではどんな業種でもパソコンが会社に最低1台はあって何かしらのデータが
保存されていたりします。なので、プログラミングは勉強して
損はないし高度なプログラミングが出来る場合はそれで収入を得ることも
可能になります。

唯、これから先はある一定の技術を身に着けておかないと中々、大変な時代に
なって来ているということも付け加えておきます。

ちなみにプログラミング好きな人は上流工程へ進まずに敢えて
現場主義の方もこれからは増えてくると思いますが
上流工程のお仕事の方がお給料は良いですし健康的です?

タグ

0, 2, channel-, com, css, html, IT, UCsLPJEAgH-KUJE, WobcLZ, youtube, YOUTUBER, いろいろ, こと, これ, スクール, チェン, ネル, プログラミン, プログラミング, メンター, もの, リテラシー, 上流, 上級者, 中級者, , 企業, 勉強, 動画, 収入, 可能, 同等, 安定, 工程, 戦士, 提供, , , 最終, 本当, 無料, 登場, 登録者, , 目標, , 自分, 解説, , 部門, 需要,

人も作られたじゃないかと錯覚してしまう。#デジタル脳

2020.01.04

Logging

01. The Innovation Series : The Digital Brain

上記の動画を見て頂きたい。
デジタル脳を作ろうとしている機関があります。
これは間違いなく進化していき、いずれデジタル脳(仮想脳)は
出来ることになります。そのとき、ひとも同じように作られたじゃないかと
いう錯覚に陥る可能性があります。

いずれデジタルの中で生命のゆりかごを作ることが可能になり
宇宙も模倣できるかもしれません。
そうなると、この宇宙も無から出来たという意味が理解できます。

Creating Virtual Humans: The Future of AI

人体全てをシュミレーションできる時代はあと30年後ぐらいで
理解できるじゃないかと思いますし、ナノテクノロジーもその頃から
医療にも導入されるようになると思います。

その頃にはデジタル脳は完成しているじゃないかなと思います。
ただ、仮想脳に自我をもたせるのは自分は反対かな。
何故なら、暴走する可能性があるから。

This Freaky Baby Could Be the Future of AI. Watch It in Action

タグ

-dvFDA, 30, 4, com, youtube, yzFW, こと, これ, シュミレーション, デジタル, とき, ナノテクノロジー, ひと, ゆりかご, 上記, , , 人体, 仮想, 全て, 動画, 医療, 反対, 可能, 可能性, 宇宙, 完成, 導入, 意味, 時代, 暴走, 模倣, 機関, 理解, 生命, , 自分, 自我, 進化, 錯覚, ,

2019年で面白かったかもなと思えた邦画ベスト3。

2020.01.03

Logging

空母いぶき

ベスト3は映画、「空母いぶき」
あの国から攻撃されたらこんな感じになるだろうなと想像することが
出来た映画、映画館で見たので見応えもあり良かった。
「いったれ??!!」が印象的でした?

ベスト2は映画、「半世界」

半世界

まさに自分も半世界、真っ只中なので映画を通して
いろいろと考えることがありました。そういう意味でベスト2です。
映画の内容は結構、単調なのだけどね。

ベスト1は映画、「楽園」

映画『楽園』本予告/綾野剛・杉咲花・佐藤浩市/衝撃のサスペンス大作

凄い重厚な映画です、見ていていろいろと考えさせられる所がありました。
見終わったあとに負の連鎖というのは、こういう事なんだろうなと感じました。
エンディングに流れる一縷(いちる)という曲がこの映画にマッチしています。
ちなみに一縷とはかすかなとか言う意味です。

尚、特別賞は「天気の子」

映画『天気の子』スペシャル予報

タグ

, 2, 2019, , 4, com, cTM-CusZlG, https, watch, www, youtube, あと, いちる, いぶき, いろいろ, エンディング, こと, ベスト, マッチ, 一縷, 世界, , 内容, 単調, , 天気, , 想像, 意味, 感じ, , 攻撃, 映画, 映画館, , 楽園, 特別, 真っ只中, 空母, 自分, 見応え, , 連鎖, 邦画,

今年最後の仕事

2019.12.27

Logging

森山直太朗 – 人間の森

今日が今年最後の仕事の方々も多いかと思います。
来年はどんな年になるかは、大晦日に記載します。

今年は11月に会社を辞めたので
大掃除などもすることもなく、仕事納めや
同僚などに「良いお年を」などと声をかけることもなく
家でまったりしています。

家でまったりしているように見えて
実際、収入を増やすにはどうすれば良いか
日々模索しています。

じぶんは、オワコンと言われているブロガー的なところで
収益が出れば良いのになと考えていますが
かなり道のりは遠いです。

ちなみに今月の収益はジュースが買えるぐらいです。
これをPS4を4台買えるぐらいに持っていきたいです…。

何か必勝法があれば教えて頂ければ嬉しいです。

タグ

11, 4, com, PS, Q-JOakKxYAU, youtube, オワコン, かなり, こと, これ, じぶん, ジュース, ところ, ブロガー, 今年, 今日, 今月, 仕事, 仕事納め, 会社, 何か, 収入, 収益, 同僚, , 大掃除, 大晦日, 実際, , , 必勝法, 方々, 日々, 最後, 来年, 模索, 記載, 道のり,

スターウォーズの過去作あらすじを分かりやすく説明している動画。

2019.12.22

Logging

「スター・ウォーズ」過去作のあらすじをまとめて紹介!

もっちゃんという方がスターウォーズの過去作品のあらすじを
紹介しているのだけど、知らない人が見てもとても分かりやすく説明している
と思います。

この人、東大卒なのですがあまりそれを売りにしていない所が良いですね。
映画好きなひとでどちらかと言えば、ストーリーや演出などを
観ていて感想などを述べているところが良いなと思います。

ちなみに映画レビューはどれも分かりやすいです。

YOUTUBEチャネルはこちらです。もっちゃんねる
https://www.youtube.com/channel/UCsN0m1lwpEDOcMy4SoLI8Pw

タグ

0, , 4, 8, channel-, com, lwpEDOcMy, Pw, SoLI, UCsN, youtube, あらすじ, こちら, スターウォーズ, ストーリー, それ, チャネル, ところ, どちらか, どれ, ひとで, もっちゃん, レビュー, , , 作品, 動画, 売り, 感想, , , 映画, 東大卒, 演出, 紹介, 説明, 過去,

感覚が違うよイーロン・マスク!

2019.12.21

Logging

Starship | Earth to Earth

スペースXのYOUTUBE動画を観ていたら
2017年にこんな動画があった…。

宇宙船を飛行機のように使うというもの。
いやこれは普通の人は考えないよな、、、その感覚がない。

飛行機の倍の予算で乗ることが出来ればこちらを選択する人はいるはず。
そして国から国へと移動するのが20?50分で出来てしまう・・・。

日本からアメリカへ行くのも1時間以内で行くことが
出来るようになれば、なんだか物事の考え方が変わっていくように
思います。

This is SpaceX

タグ

0, , 20, 2017, 50, com, youtube, zqE-ultsWt, アメリカ, イーロン, こちら, こと, これ, スペース, パス, マスク, もの, 予算, , , 動画, , 宇宙船, 感覚, 日本, 普通, 物事, 移動, 考え方, 選択, 飛行機,

ホログラムは次世代ディスプレイ!?

2019.12.15

Logging

Realfiction Showreel 2019

ホログラムは次世代ディスプレイになると思いますが、
まずは商業施設などで使われるようになり、15年後ぐらいには
一般家庭にもホログラムディスプレイが普及すると思います。

たぶん、まだまだ先の話です、いまの映像は
ホログラム映像が流行すれば、オールドテクノロジーになって
しまうでしょうね。

その頃の子供はホログラムが当たり前になっている世界で
暮らすことになっていると思うと、、、。

現実との境界線が曖昧になりそうな気がします。

テクノロジーって良い反面、必ず負の側面があると思います。
ホログラムの負の側面は想像性が乏しくなる可能性かなと思います。

Realfiction at Exponatec in Cologne 2017

タグ

15, AbV-vzwJJtQ, com, https, watch, www, youtube, いま, オールド, こと, ディスプレイ, テクノロジー, ホログラム, 一般, 世界, 側面, , 反面, 可能性, 商業, 境界線, 子供, 家庭, 当たり前, 想像, 施設, 映像, 普及, 曖昧, 次世代, , 流行, 現実, , , ,

日本語で機械学習のことを解説しているチャネル。

2019.12.14

Logging

探していたらあったよSONY!!。
昨日、「YOUTUBEで日本語で人工知能の解説している動画あまりないよね。」
と記載していたのだけど・・・。

解説している動画がありました。
SONYがオープンで解説している、、やっぱりこういう事を
公開しているということは人手が足りないですね。

人工知能(機械学習)を理解してゴニョゴニョして
遊びができないひとが結構多いだなとちなみに品質の良いモデル作りが
機械学習では要になるそうです。

Deep Learning入門:ニューラルネットワーク学習の仕組み

勉強したい方は下記のリンクからどうぞ
https://www.youtube.com/channel/UCRTV5p4JsXV3YTdYpTJECRA

タグ

, 4, 5, channel-, com, JsXV, SONY, UCRTV, youtube, YTdYpTJECRA, こと, ゴニョゴニョ, チャネル, ひと, モデル, リンク, 下記, , 人工, 人手, 公開, 勉強, 動画, 品質, 学習, , 日本語, 昨日, 機械, 理解, 知能, , 解説, 記載,

英語を止めて中国語を勉強なさい。

2019.12.09

Logging

英語を止めて中国語を勉強しなさい

https://www.lingq.com/ja/

20ヶ国語話せるおじいさん…。
凄いな・・・日本人が聞いても理解できるから凄いな。

たぶん、日本人は完璧な英語が喋りたいから、挫折するだろうなと
感じます。伝わらないと日本人は結構な確率で挫折する。

それが一番の障壁になっているのだろうなと感じます。

ちなみに自分は英語を何度も勉強しようとして途中で止めてきた
ひとですが、聴く能力だけは映画やYOUTUBEで英語を理解していない
日本人より聞くことが多いので
その能力だけは高くなっているように思えます。

ただし、、、何を言っているかは1/4ぐらいの割合で理解できる程度です:D
自分が思うに聞く?話す?書くなのかも。

でも日本人の場合、最初に文法的なことから理解しようというするから
挫折するのかなと思います。

それとは別に下記の動画のような英単語勉強方法をすることをオススメします。

【英単語暗記法】20000語を覚えるための方法

タグ

0, , 20, 4, com, UlCz, youtube, おじいさん, おすすめ, こと, それ, , 下記, 中国語, , 何度, 割合, 勉強, 動画, 場合, 完璧, 挫折, 方法, 日本人, 映画, 最初, 理解, 確率, 程度, 結構, 能力, 自分, 英単語, 英語, , 途中, 障壁,

ゲーム、シティーズ:スカイラインが面白そう!

2019.12.02

Logging

ゲーム、シティーズ:スカイラインが面白そうというか、
シムシティみたいなゲームですけど、かなりリアルです。

【Cities:Skylines】リアルな日本の風景~日々を送る街・国道バイパスとその周辺

動画見て頂ければ分かる通り、超リアルに自分好みの街をつくることが
可能です。これは神的な地位に自分がなった気分になるのは
間違いないでしょう。

支配欲の強い人にはすごくオススメなゲームかと思います。
そしてこういう上記のような超リアルな日本の街などを作成したり
下記の動画のような事を行うって再生回数を増やすのも良いでしょうし

物凄く過酷でも市民は病院に通うのか試してみた!【Cities:Skylines / シティーズスカイライン】

とてもシティーズ:スカイラインは遊びに幅があるように
感じます。ちなみにPC版はセール中(2019年12月4日)です。

745円と低価格です、またPS4やMac版も発売されています。
https://store.steampowered.com/app/255710/Cities_Skylines/?l=japanese

タグ

2019, 255710, 4, 745, App, Cities, com, japanese, Mac, PC, PS, Skylines, steampowered, store, おすすめ, かなり, ゲーム, こと, これ, シティーズ, シムシティ, スカイライン, セール, リアル, 上記, 下記, , , 作成, 価格, 再生, 動画, 可能, 回数, 地位, , 支配欲, 日本, 気分, , 発売, , 自分, , 通り,

こういうの結構需要あるよね。

2019.12.01

Logging

こういうYOUTUBE動画は結構需要あるよねと思ってしまいます。
例えば、雨の街角を記録した映像とか、ほんと何気ないのだけど
ほんとにそういうのが好きです。

雨の音のアプリがあるのは、自分は納得しています。
自分も結構使っています。スマートスピーカーから雨音を一日中流すことも
あります。雨音って聞いていても雑音にもならないし、
逆になんだか落ち着けるので良いかなと思っています。

屋久島の夜音(虫の音色)も雨音と同じぐらい落ちけます。
ちなみに雨音聞かせてくれるサイトがあります。
https://www.rainymood.com/ 【昔は映像も流れてた】

こういった環境音っていま流行っているらしいですが…
休日は何も考えないでぼーっとこういう映像を観るのもリラックスに
良いかなと思っています。

Walking in Heavy Thunderstorm at Night in NYC (Umbrella Binaural 3D Rain Sounds) ASMR 4K

タグ

com, rainymood, youtube, アプリ, いま, こと, サイト, スピーカー, スマート, ほんと, リラックス, 休日, , 動画, , 屋久島, , 映像, 環境, 納得, 自分, , 街角, 記録, , 雑音, , 雨音, 需要, , 音色,

SF好きならおすすめYOUTUBEチャンネル

2019.11.28

Logging

SF好きならおすすめYOUTUBEチャンネルDUST[ダスト]です。こちらのYOUTUBEチャンネルはSFショートムービーが数多くアップロードされています。

The Future Awaits | DUST

どれもハイクオリティの作品が多いように思えます。凄いなと言う印象を受けました。

DUSTチャンネルはこちらになります。
https://www.youtube.com/channel/UC7sDT8jZ76VLV1u__krUutA

DUSTの動画予告を貼っときますね。
興味のある方は是非、作品の視聴をどうぞ。
ちなみに2019年11月時点で登録者数145万人でかなり多いです、、、。

Sci-Fi Short Film “R'ha" | DUST

タグ

, 11, 145, 2019, 7, 76, 8, channel-, com, DUST, https, jZ, krUutA, sDT, SF, UC, VLV, www, youtube, アップロード, おすすめ, かなり, こちら, ショート, ダスト, チャンネル, どれ, ハイクオリティ, ムービー, , 予告, 作品, 動画, 印象, , , 時点, 登録者, 興味, 視聴,

googleスプレッドシートの値を取得することは可能ですが!

2019.11.24

Logging

googleスプレッドシートの値を取得することは可能ですが動的な値を取得することは不可能です。
動的処理というのはスプレッドシートの関数などで値を表示している情報をPHPなどで外部取得することは不可能です。

【Google神関数】生産性が100倍上がる!スプレッドシート4つの便利関数はこれ!

※方法があるようでしたら、教えて頂ければありがたいです。

なお、PHPからスプレッドシートの値などは変更可能です。
今回は値の取得に関しての方法を記載しております。

手順
1.グーグルさんからグーグルスプレッドシートのAPIKEYを取得する。
2. グーグルスプレッドシートを作成しスプレッドシートのID部分を取得する。
3.サーバ上にComposerをインストールし、下記のコマンドを実行する。

composer require google/apiclient:"^2.0"

下記のソースのAPIキー、スプレッドシートIDの部分を取得した値に置き換える。

<?php
require_once __DIR__ . '/vendor/autoload.php';
//$keyFile = __DIR__. "/credentials.json";
define("APIKEY","APIキー");
define("SPID","スプレッドシートID");
$spreadsheetId = SPID;
$range ="Sheet1!A1:B123";
$client = new Google_Client();
$client->setApplicationName("Spreadsheet");
$client->setDeveloperKey(APIKEY);
$scopes = [Google_Service_Sheets::SPREADSHEETS];
$client->setScopes($scopes);
$service = new Google_Service_Sheets($client);
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
// TODO: Change code below to process the `response` object:
echo '<pre>', var_export($response->getValues()), '</pre>', "n";

結構ハシオッタ説明になりますが、こちらでGoogleスプレッドシートの値を取得または操作が可能となります。

タグ

, 2, 2.0, , 4, 5, A`, apiclient, APIKEY, com, Composer, et, fCs, Google, https, ID, php, quot, require, watch, www, youtube, インストール, グーグル, こと, コマンド, サーバ, シート, スプレッド, ソース, 下記, 不可能, 今回, 作成, , 処理, 取得, 可能, 変更, 外部, 実行, 情報, 手順, 方法, 表示, 記載, 部分, 関数,

何だこれはsayaプロジェクトが凄いよ!

2019.11.18

Logging

知らない間にsayaがリアル過ぎにこれはやばいぞ。
手話とかもできるそうです、そしてAIなので対話などが可能だとか
恐ろしい…。

等身大の液晶パネルの中でsayaと会話が出来たりするだって
これ商品として売り出したら一定の個人ユーザーが購入しそうな
勢いかと思います。ある意味、犯罪がなくなり安全な社会になりそうです。

これが等身大のロボットになるとかいう世の中が
あと40年?50年後には現実になるだろうなぁ…恐ろしい世の中です。
世の中はどういう社会になるのだろうか?
http://www.sayaproject.com/

saya project

映画アニメ【イヴの時間】みたいな事が現実になりそうですね。

映画『イヴの時間』予告編

タグ

40, 50, AI, com, http, https, rTDJlHcf-SY, saya, sayaproject, watch, www, youtube, アニメ, いう, これ, パネル, プロジェクト, ユーザー, リアル, ロボット, 一定, , , , 会話, 個人, 勢い, 可能, 商品, , 安全, 対話, 意味, 手話, 映画, 時間, 液晶, 犯罪, 現実, 社会, 購入, , ,

WordPressの404外部リダイレクトプラグインを作りました。

2019.11.16

Logging

WordPressの404外部リダイレクトプラグインを作りました。
ソースコードはこんな感じになってます、、、。
使用される方は下記のURLよりダウンロードを行ってください。
解凍してフォルダをワードプレスのpluginを置く場所へアップロードし
page404goプラグインを有効にしていただければ使用できます。
https://zip358.com/plugin/page404go.zip

<?php
/*
Plugin Name: page404GO!!
Plugin URI: https://zip358.com/plugin/page404go.zip
Description: 404ページを任意のURLへ変換し遷移させる
Author: taoka toshiaki
Version: 1.0
Author URI: https://zip358.com/
*/
add_action( 'wp', function() {
    global $wp;
    $domain = get_option('domain404page')?get_option('domain404page'):"https://zip358.com/";
    if(is_404()){
        wp_redirect($domain.$wp->request);
        exit;
    }
 });
add_action('admin_menu','page404go_setting');
function page404go_setting(){
	add_options_page(
		'zip358.com:プラグイン',
		'404リダイレクト設定',
		'administrator',
		'page404go',
		function(){
            if(isset($_POST["domain404page"])){
                if(preg_match("/https?://.*/$/",$_POST["domain404page"])){
                    $url = $_POST["domain404page"];
                }elseif(preg_match("/https?://.*/",$_POST["domain404page"])){
                    $url = $_POST["domain404page"]."/";
                }else{
                    $url = "https://zip358.com/";
                }
                update_option('domain404page', wp_unslash($url));
            }
            ?>
            <form method="post" action="">
                <h2>リダイレクトドメイン指定</h2>
                <input type="text" style="width:350px" name="domain404page" value="<?=get_option('domain404page')?get_option('domain404page'):""?>" placeholder="https://zip358.com/">
                <?php submit_button(); ?>
            </form>
            <?php
        }
	);
}

タグ

1195254834632380416, 358, 404, Author, com, description, go, lt, name, page, php, plugin, status, taoka, toshiak, Twitter, URI, url, WordPress, zip, アップロード, コード, ソース, ダウンロード, フォルダ, プラグイン, プレス, リダイレクト, ワード, 下記, 任意, 使用, 場所, 変換, 外部, 感じ, , 有効, 解凍, 遷移,

PHP非同期の考え方サンプル。

2019.11.12

Logging

非同期の考え方サンプルです。
さて非同期ってなんでしょうか?
非同期とは次から次へと仕事をお願いする状態。
仕事量が重いと結果が返るまで時間がかかります。
なので、Aという仕事が重く、B、Cという仕事が楽な場合は
A、B、Cという仕事を順番に頼んでもAの結果はBの後やCの後に
結果が返ってきます。

逆に同期処理とは何か?
A、B、C の順に仕事を頼むと、Aの仕事が終えた後にB、Cと仕事を
行います。

非同期=並列処理と考えると良いかも。
同期処理=逐次処理と考えると良いかも。

https://www.youtube.com/watch?v=VHlW65WPUDY


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <title>Document</title>
    <script>
        $(function(){
            $("#btn").on("click",function(){
                test();
                return false;
            })
        });
        function test(){
            var data = $("#frm").serialize();
            $.ajax({
                type: "post",
                url: "url.php",
                data: data,
                dataType: "json",
                success: function (response) {
                    console.log(response);
                }
            });
        }
    </script>
</head>
<body>
    <a href="#" id="btn">クリック</a>
    <form id="frm">
        <input type="text" name="test1">
        <input type="text" name="test2">
        <input type="text" name="test3">
    </form>
</body>
</html>
<?php
//url.php
$data = [];
if(!is_null($_POST)){
    foreach($_POST as $key=>$val){
        $data[$key] = $val;
    }
    print(json_encode($data));
}else{
    print(0);
}

タグ

65, 8, charset, com, DOCTYPE, en, gt, head, html, lang, lt, meta, name, php, quot, UTF-, VHlW, WPUDY, youtube, お願い, サンプル, 並列, 仕事, , 処理, 同期, 場合, , 時間, , 状態, 結果, 考え方, , , 順番,

マイクロソフトは意外にも柔軟かも。

2019.11.11

Logging

マイクロソフトは意外にも柔軟かも。
これから通信速度が早くなり、クラウド上で何かやり取りすることが
増えていくと思います。
マイクロソフト一色ではなく、AndroidやAWSなども使いつつ
マイクロソフトの製品も使ってねに方向転換したように
感じます。

CEOが変わると経営の方針が結構変わるだなと
結果が出るまで時間がかかったと思いますが、良い意味で
マイクロソフトは流れを変えてITの支流に戻ってきたように感じます。

これからの動きに注目ですね。

Microsoft CEO Satya Nadella: How I Work | WSJ

タグ

Android, AWS, CEO, com, IT, kexuG-YcQFA, youtube, クラウド, こと, これ, マイクロソフト, やり取り, 一色, 意味, 支流, 方向転換, 方針, 時間, 注目, 経営, 結果, 製品, 通信, 速度,

自分の務めてる会社の1次入社試験(過去問)

2019.10.12

Logging

自分の務めてる会社の入社試験(過去問)です。
これぐらいのことは出来てもらわないと困るという事で出題したのですが
どうもこの問題難しいのか?
ここまで漕ぎ着けて採用された人はひとりしかいない。
大手の会社にはこんなの簡単だよという人は
たくさんいると思いますが、自分の務めてる会社は
どちらかと言えば零細企業です。
こういう問題出しても中々、解けない人が多くて
採用まで至らないのが現状です。
※今は募集していません。
■問題
郵便番号入力すると検索結果を表示するようにせよ。
また下記の条件を満たしていることとする。
1.サジェスト機能がある。
2.PHP言語を使用。
3.非同期処理。
単なるこれだけでも、中々出来る人が来ない。
これが零細企業地方の現状です。
https://zip358.com/tool/postal_code_search/

タグ

, 2, , 358, Code, com, php, postal, search, tool, zip, ここ, こと, これ, これぐらい, これだけ, サジェスト, たくさん, どちらか, ひとり, また下, 中々, , , , 企業, 会社, 使用, 入力, 入社, 処理, 出題, 募集, 同期, 問題, 地方, 大手, 採用, 条件, 検索, 機能, 現状, 番号, 簡単, 結果, 自分, 表示, 言語, , 試験, 過去問, 郵便, 零細,

ちょっとした物。InstagramのAPI取得する

2019.10.05

Logging

Instagram(インスタグラム)の画像などが取得することが出来ます。アクセストークンの取得の方法がわからない場合はぐぐってください。尚、APIのバージョンが、今後上がった場合は下記のコードは使用できなくなる可能性があります。ちなみにこのコード動作確認はしておりません。このコードを理解して使用できる人のみお使いください。
尚、画像取得数はデフォルト10にしています。プログラムではアクセストークンと20を渡しています。
画像URLはコメントアウトのところに入ってきます。※プログラムを可変してお使いください。

<?php
//Instagram
//https://api.instagram.com/v1/users/self/media/recent/?access_token=&count=
class instagram_api{
    public const url ="https://api.instagram.com/v1/users/self/media/recent/?access_token=";
    public function api ($access_token= "",$img_count =10){
        $url = self::url;
        return (object)json_decode(@file_get_contents($url . $access_token."&count=".$img_count));
    }
    public function obj_img($obj=Null){
        if(!is_object($obj))return false;
        if(!$obj->data)return false;
        foreach ($obj->data as $key => $item) {
            var_dump($item);
            // $item->images->standard_resolution->url
            // $item->images->low_resolution->url
        }
        return true;
    }
}
$obj = instagram_api::api("access_token",20);
instagram_api::obj_img($obj);

タグ

, 10, 20, access, API, class, com, const, count, https, instagr, Instagram, lt, media', php, public, quot, recent, self, token, url, users, アウト, アクセス, インスタグラム, コード, こと, コメント, デフォルト, トークン, ところ, バージョン, プログラム, 下記, , 今後, 使用, 動作, 取得, 可能性, 場合, 方法, , 理解, 画像, 確認,

高知県のダム貯水率をグラフ化してみた。

2019.09.21

Logging

高知県のダム貯水率をグラフ化してみた。
親戚にダムに勤めている人がいるのがきっかけで貯水率って
HPで表示させているのかなという事で調べてみました。
結果、かなり古いデザインサイトが現れた。
何とも懐かしい気持ちになりました。
そこでこの表からグラフ化してみたいなとか思って
ゴニョゴニョ作ってみた。
ちなみにソースコードが変わると
抜き取り出来なくなります。
追記:やはり変更されていました2へ続く
ソースコードを貼っときます。
ajaxとPHPを使用してます、XPathで貯水率だけ抜き取ってます。
サンプルサイト
https://zip358.com/tool/demo6/index.html

<?php
$html = file_get_contents("高知県のダム情報のURL");
$html = mb_convert_encoding($html,"UTF-8","SJIS");
$dom = new DOMDocument();
$html = mb_convert_encoding($html, "HTML-ENTITIES", 'UTF-8');
@$dom->loadHTML($html,LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
$ary=array(
    "nagase",
    "kamaidani",
    "kagami",
    "sameura",
    "kirimi",
    "sakamoto",
    "oodo",
    "nakasugawa",
    "iburigawa"
);
for($i=3;$i<=11;$i++){
    foreach ($xpath->query("/html/body/form/div[2]/table/tr/td/table/tr[$i]/td[7]") as $node) {
        $r[] = preg_replace("/x{00a0}/u","",$node->textContent);
    }
}
foreach ($r as $key => $value) {
    $obj[$ary[$key]] = $value;
}
print json_encode($obj);
$(function(){
    dam();
    //setInterval(dam,9999)
});
function dam(){
    $.ajax({
        url : './dam.php',
        dataType : 'json',
        success : function(obj){
            $("#nagase").attr( "style","width:"+ parseInt(obj.nagase) +"%");
            $("#kamaidani").attr( "style","width:"+ parseInt(obj.kamaidani) +"%");
            $("#kagami").attr( "style","width:"+ parseInt(obj.kagami) +"%");
            $("#sameura").attr( "style","width:"+ parseInt(obj.sameura) +"%");
            $("#kirimi").attr( "style","width:"+ parseInt(obj.kirimi) +"%");
            $("#sakamoto").attr( "style","width:"+ parseInt(obj.sakamoto) +"%");
            $("#oodo").attr( "style","width:"+ parseInt(obj.oodo) +"%");
            $("#nakasugawa").attr( "style","width:"+ parseInt(obj.nakasugawa) +"%");
            $("#iburigawa").attr( "style","width:"+ parseInt(obj.iburigawa) +"%");
            $("#nagase").attr( "aria-valuenow",parseInt(obj.nagase));
            $("#kamaidani").attr( "aria-valuenow",parseInt(obj.kamaidani));
            $("#kagami").attr( "aria-valuenow",parseInt(obj.kagami));
            $("#sameura").attr( "aria-valuenow",parseInt(obj.sameura));
            $("#kirimi").attr( "aria-valuenow",parseInt(obj.kirimi));
            $("#sakamoto").attr( "aria-valuenow",parseInt(obj.sakamoto));
            $("#oodo").attr( "aria-valuenow",parseInt(obj.oodo));
            $("#nakasugawa").attr( "aria-valuenow",parseInt(obj.nakasugawa));
            $("#iburigawa").attr( "aria-valuenow",parseInt(obj.iburigawa));
            $("#nagase").text(obj.nagase + "%");
            $("#kamaidani").text(obj.kamaidani + "%");
            $("#kagami").text(obj.kagami + "%");
            $("#sameura").text(obj.sameura + "%");
            $("#kirimi").text(obj.kirimi + "%");
            $("#sakamoto").text(obj.sakamoto + "%");
            $("#oodo").text(obj.oodo + "%");
            $("#nakasugawa").text(obj.nakasugawa + "%");
            $("#iburigawa").text(obj.iburigawa + "%");
        },
        error: function(obj){
            alert("error");
        }
    });
  }
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>高知県のダム貯水率</title>
    <script src="../jquery/jquery-3.4.1.js"></script>
    <link rel="stylesheet" href="../bootstrap/css/bootstrap.css">
    <script src="./js/dam.js"></script>
    <style>
        body{
            background-color: #3e4654;
            color: aliceblue;
        }
    </style>
</head>
<body class="d-flex flex-column h-100">
    <main role="main" class="flex-shrink-0">
        <div class="container">
            <table class="table table-dark">
                <tr>
                    <td style="width:15%">
                        <p>永瀬ダム</p>
                    </td>
                    <td style="width:85%">
                        <div class="progress"  style="width:100%">
                            <div id="nagase" class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="20"
                                aria-valuemin="0" aria-valuemax="100" style="width:20%"></div>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td style="width:15%">
                        <p>鎌井谷ダム</p>
                    </td>
                    <td style="width:85%">
                        <div class="progress">
                            <div id="kamaidani" class="progress-bar progress-bar-striped progress-bar-animated bg-warning" role="progressbar" aria-valuenow="20"
                                aria-valuemin="0" aria-valuemax="100" style="width:20%"></div>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td style="width:15%">
                        <p>鏡ダム</p>
                    </td>
                    <td style="width:85%">
                        <div class="progress">
                            <div id="kagami" class="progress-bar progress-bar-striped progress-bar-animated bg-info" role="progressbar" aria-valuenow="20"
                                aria-valuemin="0" aria-valuemax="100" style="width:20%"></div>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td style="width:15%">
                        <p>早明浦ダム</p>
                    </td>
                    <td style="width:85%">
                        <div class="progress">
                            <div id="sameura" class="progress-bar progress-bar-striped progress-bar-animated bg-secondary" role="progressbar" aria-valuenow="20"
                                aria-valuemin="0" aria-valuemax="100" style="width:20%"></div>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td style="width:15%">
                        <p>桐見ダム</p>
                    </td>
                    <td style="width:85%">
                        <div class="progress">
                            <div id="kirimi" class="progress-bar progress-bar-striped progress-bar-animated bg-success" role="progressbar" aria-valuenow="20"
                                aria-valuemin="0" aria-valuemax="100" style="width:20%"></div>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td style="width:15%">
                        <p>坂本ダム</p>
                    </td>
                    <td style="width:85%">
                        <div class="progress">
                            <div id="sakamoto" class="progress-bar progress-bar-striped progress-bar-animated bg-warning" role="progressbar" aria-valuenow="20"
                                aria-valuemin="0" aria-valuemax="100" style="width:20%"></div>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td style="width:15%">
                        <p>大渡ダム</p>
                    </td>
                    <td style="width:85%">
                        <div class="progress">
                            <div id="oodo" class="progress-bar progress-bar-striped progress-bar-animated bg-danger" role="progressbar" aria-valuenow="20"
                                aria-valuemin="0" aria-valuemax="100" style="width:20%"></div>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td style="width:15%">
                        <p>中筋川ダム</p>
                    </td>
                    <td style="width:85%">
                        <div class="progress">
                            <div id="nakasugawa" class="progress-bar progress-bar-striped progress-bar-animated bg-dark" role="progressbar" aria-valuenow="20"
                                aria-valuemin="0" aria-valuemax="100" style="width:20%"></div>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td style="width:15%">
                        <p>以布利川ダム</p>
                    </td>
                    <td style="width:85%">
                        <div class="progress">
                            <div id="iburigawa" class="progress-bar progress-bar-striped progress-bar-animated bg-warning" role="progressbar" aria-valuenow="20"
                                aria-valuemin="0" aria-valuemax="100" style="width:20%"></div>
                        </div>
                    </td>
                </tr>
            </table>
        </div>
    </main>
    <footer class="footer mt-auto py-3">
        <div class="container">
            <span class="text-muted">©zip358.com</span>
        </div>
    </footer>
</body>
</html>

タグ

2, 358, 6, 8, ajax, com, contents, convert, demo, encoding, file, GET, HP, html, https, index, lt, mb, php, SJIS, tool, url, UTF-, XPath, zip, かなり, きっかけ, グラフ, コード, ゴニョゴニョ, サイト, サンプル, ソース, そこ, ダム, デザイン, , , , 使用, 変更, 情報, 気持ち, 結果, , 表示, 親戚, 貯水, 追記, 高知県,

楽天RMSの禁止タグ制限を突破サービス!?

2019.09.07

Logging

楽天RMSの禁止タグ制限を突破サービスを自前してみました。
完璧ではないけど需要はあると思いますのでリリース、
ちなみにこちらのソースコードは非公開とさせて頂きます。
※会社でも似たような機能開発していますから…。
自分の頭の中にソースコードの設計工場があります(^^)。
リンクはこちらからお使いください。
https://zip358.com/tool/rakuten-RMS-tag/
広告でご飯食べてます。
ちなみにモバイル対応は意識していません。
PCブラウザより操作を行ってください。
※最新のChromeブラウザ推奨しております。
 
 

タグ

358, Chrome, com, https, nbsp, PC, rakuten-RMS-tag, RMS, tool, www, zip, お使い, コード, こちら, ご飯, サービス, ソース, タグ, ブラウザ, モバイル, リリース, リンク, , 会社, 公開, 制限, 完璧, 対応, 工場, 広告, 意識, 推奨, 操作, 最新, 楽天, 機能, 禁止, 突破, 自分, 自前, 設計, 開発, 需要, ,

画像をタイル状に分離して一括ダウンロードさせるジェネレーター

2019.09.07

Logging

画像をタイル状に分離して一括ダウンロードさせるジェネレーターを
作ってみました。画像は自動的に削除されます?
あることをすれば他人の画像がアップした画像も削除されます。
ちなみに一括ダウンロードbuttonを押すと画像がサーバー上に保存され
強制ダウンロードが始まります。
動作はブラウザChromeオンリーです。
また一括ダウンロードを押すと複数のファイルを一括ダウンロードするか
どうかの問い合わせが表示されますので「はい」を
選択してください。尚、30秒以内に保存されていないファイルは
次々と削除されます。
サイトはこちらから
https://zip358.com/tool/demo5/index-14.html
ソースコードは下記になります。
ページ(base64生成+画像ダウンロード処理)

追記:zipファイルにより格納するように処理を変更しました。
参考にしたサイト:https://ex1.m-yabe.com/archives/4215

<!DOCTYPE html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>画像分離してダウンロード:画像分離ジェネレーター</title>
        <meta name="description" content="画像分離してダウンロード:画像分離ジェネレーター">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script src="../jquery/jquery-3.4.1.js"></script>
        <link rel="stylesheet" href="../bootstrap/css/bootstrap.css">
        <!-- Global site tag (gtag.js) - Google Analytics -->
        <script async src="https://www.googletagmanager.com/gtag/js?id=UA-71682075-1"></script>
        <script>
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());

        gtag('config', 'UA-71682075-1');
        </script>        
        <style>
            body{
                background-color: black;
                color: antiquewhite;
            }
            img{
                margin:10!important;
                padding:10!important;
            }       
            #container{
                width: 100%;
            }
            #container img{
                margin:10px;   
            }       
        </style>    
    </head>
    <body>
        <span id="bat"></span><a id="dl"></a>
        <input class="form-control" type="file"></input>
        <div id="container"></div>
        <script>
            $(function(){
                $("[type=file]").on("change",function(){
                    $('#container').html("");
                    $("#bat").html("");
                    console.log($(this));
                    if(!$(this).prop('files')[0].type.match(/[png|jpg|jpge|gif]/)){
                        alert("ファイル形式エラー");
                        return false;
                    }                        
                    var canvas = document.createElement('canvas');
                    var reader = new FileReader();
                    reader.onload = function(event) {
                        var image = new Image();
                        image.onload = function() {
                            sprite = {width:50,height:50};
                            canvas.width = sprite.width;
                            canvas.height = sprite.height;
                            var ctx = canvas.getContext("2d");                            
                            var x = 0;
                            for(var i=0; i*sprite.height<image.height; i++){
                                for(var j=0; j*sprite.width<image.width; j++){
                                    ctx.drawImage(
                                    image,j*sprite.width,i*sprite.height,
                                    sprite.width,sprite.height,
                                    0,0,
                                    sprite.width,sprite.height
                                    );

                                    var spriteElement = new Image;
                                    spriteElement.src= canvas.toDataURL();
                                    $('#container').append(spriteElement);
                                }
                            }
                            $("#bat").html("<input type='button' value='一括ダウンロード' onclick='bat_img()'>");
                        }
                        image.src = event.target.result;                       
                    }
                    reader.readAsDataURL($(this).prop('files')[0]);
                    
                });
            });

            function bat_img(){
                var data = [];
                for(var i=0; i< $("img").length;i++){
                    data.push({"base64":$("img").eq(i).attr("src"),"no":i});
                }
                $.ajax({
                    type: 'POST',
                    url: 'bat_img.php',
                    data:{"obj":data},
                    dataType: 'json'
                }).done(function(obj){

                    if(obj[obj.length - 1 ].chk=="ok"){

                        var link = document.getElementById("dl");
                        link.href = obj[obj.length - 1].zippath;
                        link.download = "zipimg.zip";
                        link.click();

                        var data2 = [];
                        for(var i = 0 ; i < obj.length ; i++){
                            if(i==0){
                                data2.push({Path:obj.path,no:obj.no,t:obj.t,"zipimgpath":obj[obj.length - 1].zippath});
                            }else{
                                data2.push({Path:obj.path,no:obj.no,t:obj.t});
                            }
                            
                        }

                       var del = function(){
                            $.ajax({
                                type: 'POST',
                                url: './bat_del.php',
                                data:{"obj":data2},
                                dataType: 'json'
                            });
                        };
                        del();
                    }
                    });
                }
        </script>
    </body>
</html>
<?php
$i=0;
foreach($_POST["obj"] as $key=>$val){
    $b64 = base64_decode(str_replace("data:image/png;base64,","",$val["base64"]));
    $no = (int)$val["no"];
    $t = time();
    $Path = "./bat_img/tmp/$t-$no.png";
    $re = @file_put_contents($Path,$b64);
    if($re){
        $obj[$i]["chk"] = $re?"ok":"ng";
        $obj[$i]["name"] = "$t-$no.png";
        $obj[$i]["path"] = $Path;
        $obj[$i]["no"] = $no;
        $obj[$i]["t"] = $t;
        $i++;
    }
}
$obj[--$i]["zippath"] = zipfile($obj);

print json_encode($obj);


function zipfile($obj){
    $ZipFiles = function($obj){
        foreach($obj as $key=>$val){
           $path[] = $val["path"];
        }
        return $path;
    };
    $Zip_Files = $ZipFiles($obj);
    $zipFileName = time().'_zipimg.zip';

    set_time_limit(0);
    $zip = new ZipArchive();
    $zipTmpDir = './tmp/zip/';
    $result = $zip->open($zipTmpDir.$zipFileName, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
    if( $result !== true ){ //エラー処理
      echo 'error!';
      exit();
    }
    foreach ($Zip_Files as $key=>$filepath) {
      $filename=basename($filepath);
    // ZIP圧縮するファイルを追加
    // ファイルパス・ファイル名としないと圧縮ファイルを解凍するとフルパスになる
      $zip->addFile($filepath,$filename); 
    }
    //ZIP 出力
    $zip->close();

    return $zipTmpDir.$zipFileName;
}
<?php

unlink($_POST["obj"][0]["zipimgpath"]);
foreach($_POST["obj"] as $key=>$val){
    $Path = $val["Path"];
    $no = (int)$val["no"];
    $t = (int)$val["t"];
    
    $cmd = function(){
        foreach(glob("./bat_img/tmp/*") as $file_name){
            $command = "rm -rf " . realpath($file_name);
            exec($command);
        }    
    };
    
    if(pathinfo($Path)["extension"]=="png" and preg_match("/bat_img\/tmp/",$Path)){
        if(is_file($Path)){
            sleep(30);
            unlink($Path);
        }else{
            $cmd();
        }
    }else{
        $cmd();
    }

}

タグ

, 14, 30, 358, 4, 5, 64, archives, base, button, Chrome, com, demo, ex, html, https, index, m-yabe, tool, www, zip, アップ, オンリー, コード, こちら, こと, サーバー, サイト, ジェネレーター, ソース, タイル, ダウンロード, はい, ファイル, ブラウザ, ページ, 一括, 下記, 他人, 保存, 処理, 分離, 削除, 動作, 参考, 問い合わせ, 変更, 強制, 格納, 生成, 画像, 表示, 複数, 追記, 選択,

変なコードを書いてしまった。それはいつものこと(笑)

2019.08.10

Logging

変なコードを書いてしまった。
PHPにstr_repeatという関数が存在しているのだけど
何のために使用するのか全然わからない。関数の内容は任意の文字を
指定回数、繰り返した文字列として返してくれるというものです。
試しにその関数を使用し変なコードを書きました。
茶目っ気ですので…。これがPCに負担がかかるとか
無限ループとかの処理にすると御縄なんでしょうけど・・・。
サンプルコードはこちらから
https://zip358.com/tool/demo5/index-11.php

<!DOCTYPE html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title></title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
        <script src="../jquery.tubular.1.0.1/js/jquery.tubular.1.0.js"></script>
        <link rel="stylesheet" type="text/css" href="../jquery.tubular.1.0.1/css/screen.css">
        <script>
            $('document').ready(function() {
            var options = {
                videoId: '760lRwLKFF0',
                mute: true,
            };
            $('#bgmovie').tubular(options);
            });
        </script>
        <style>
            body{
                background-color: #000;
                color: #fff;
                font-size: 80px;
                line-height: 80px;
            }
            p{
                color: #38a9c5;
            }
        </style>
    </head>
    <body>
    <div id="bgmovie">
        <!--[if lt IE 7]>
            <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="#">upgrade your browser</a> to improve your experience.</p>
        <![endif]-->
<?php
$str = str_repeat("高知 よさこい 踊る,",7);
var_dump(str_getcsv($str));
?>
<p class="oshite" data-oshite="<?=$str?>"style="text-decoration: underline">▼おして知るべし</p>
※おして知るべしをクリックすると7ウィンドウ開きますよ!!
<?php
    foreach(str_getcsv($str) as $val){
?>
<?php
    }
?>
</div>
        <script>
            $(function(){
                $(".oshite").on("click",function(){
                    let oshite = $(this).attr("data-oshite").split(",");
                    for(var i = 0 ; i < oshite.length ; i++){
                        if(oshite[i]!==""){
                            window.open("https://twitter.com/search?src=typed_query&q=" + encodeURIComponent(oshite[i]));
                        }
                    }
                });
            });
        </script>
        <script src='https://vjs.zencdn.net/7.6.0/video.js'></script>
    </body>
</html>

タグ

--, 11, 358, 5, 7, 8, , class, com, demo, DOCTYPE, endif, gt, html, IE, if, index, lt, lt-ie, no-js, PC, php, repeat, STR, tool, zip, いつも, コード, こちら, こと, これ, サンプル, それ, ため, もの, ループ, 任意, , 使用, 内容, 処理, 回数, , 存在, 指定, 文字, 文字列, 無限, , 茶目っ気, 負担, 関数,