phpでイマドキDB接続の仕方なの?

2019.07.20

Logging

実行していないので上手く動いているかは
未知数ですが、コードの書き方はイマドキの書き方に
しています。PHP公式ではこう書かれています。

プリペアドステートメントのパラメータに変数をバインドすると・・・。
i 対応する変数の型は integer です。
d 対応する変数の型は double です。
s 対応する変数の型は string です。
b 対応する変数の型は blob で、複数のパケットに分割して送信されます。

<?php
$servername = "hostname";
$dbname ="dbname";
$dbusername = "root";
$dbpassword = "pass";
if($conn = mysqli_connect($servername,$dbusername,$dbpassword,$dbname)){
    $sql = "select username from mastertbl where uid =? and password = ?";
    $stmt = mysqli_stmt_init($conn);
    if(mysqli_stmt_prepare($stmt,$sql)){
        mysqli_stmt_bind_param($stmt,"ss",$uid,password_hash($password,PASSWORD_DEFAULT));
        mysqli_stmt_execute($stmt);
        mysqli_stmt_store_result($stmt);
        if($cnt=mysqli_stmt_num_rows($stmt)){
            $result = mysqli_stmt_get_result($stmt);
            for($i=0;$i<$cnt;$i++){
                $row = mysqli_fetch_assoc($result);
            }
        }
    }
    mysqli_stmt_close($stmt);
    mysqli_close($conn);
}

タグ

blob, conn, connect, db, dbname, dbpassword, dbusername, double, hostname, if, Integer, lt, mysqli, pass, php, root, select, servername, SQL, string, user, イマドキ, コード, バインド, パケット, パラメータ, プリペアドステートメント, 仕方, 公式, 分割, , 変数, 実行, 対応, 接続, 書き方, 未知数, 複数, 送信,

jsのクリックイベントの謎??

2019.06.22

Logging

javaScriptとjqueryのクリックイベントの挙動が違うのは
わかったのですが・・・。
これは結構奥が深い気がします。

See the Pen jsのクリックイベントの謎?? by taoka (@taoka-toshiaki) on CodePen.0

タグ

0, 265, BY, codepen, default, embed, gt, hash, Height, href, html, ID, io, javascript, jquery, JS, lt, ON, Pen, QXprJX, result, See, slug, tab, taoka, taoka-toshiaki, The, theme, user, イベント, クリック, これ, , 挙動, , ,

単純なコードで背景色にグラデーション。

2019.06.15

Logging

単純なコードで背景色にグラデーションつける。
このコード自体は単純なコードです、ですが・・・。
気に食わないので何度も初期の色コードを設定を変えてみたのですが
鮮やかさがでません。ちょっとドス黒いグラデーションのまま。
コードを貼り付けておきます。
一時間ぐらい色を変えて遊んでました:D

See the Pen 単純なコードで背景色にグラデーション。 by taoka (@taoka-toshiaki) on CodePen.0


 

タグ

0, 265, BY, codepen, default, embed, gt, hash, Height, href, ID, io, JQGLoO, JS, lt, Pen, result, See, slug, tab, taoka, taoka-toshiaki, The, theme, user, グラデーション, コード, ドス, まま, , 何度, 初期, 単純, 背景色, 自体, , 設定,

文字の置き換え と コールバック

2019.06.08

Logging

お蔵入りしたコードです。文字の置き換えとコールバック関数です。
置換する際に、それぞれ違う文字に置き換えて表示したいなどに
使用すると便利かなと思います。

See the Pen 文字の置き換え と コールバック by taoka (@taoka-toshiaki) on CodePen.0

タグ

0, 265, BeXapO, BY, codepen, default, embed, gt, hash, Height, href, html, ID, io, lt, ON, Pen, result, See, slug, tab, taoka, taoka-toshiaki, The, theme, user, お蔵入り, コード, コール, それぞれ, バック, 使用, 便利, 文字, 置換, 表示, 関数, ,

MYSQLのif文みたいなものを使用する機会が物凄く少ない気がする。

2019.05.18

Logging

### mysql case = if文みたいなもの
```sql
select namae,tensu
case when (tensu >= 75 and tensu <= 80)  then '可'
when (tensu >= 25 and tensu < 75)  then '否' else '???' end as kahi
from tbl;
table name tbl
|namae|tensu|
|---|---|
|hirose|77|
|non|76|
|arimura|78|
|aragaki|80|

mysql case = if文みたいなものを使用する機会が物凄く少ない気がする。
プログラム言語って使用しなければ抜け落ちるです。
自分の場合、たぶん長期的な記憶に障害があって抜け落ちるですw🙄。
メモしたことすら忘れてしまう…これは痛い老害?。

でも、好きな事は大体覚えていますね、概念的な事を覚えていたら大丈夫です😌。
 
 

タグ

```, 25, 39, 75, 76, 77, 78, 80, and, aragaki, arimura, as, case, else, end, from, gt, hirose, if, kahi, lt, MYSQL, namae, name, non, select, SQL, TABLE, tbl, tensu, then, when, こと, プログラム, メモ, もの, 使用, , , 場合, , 機会, , 自分, 言語, 記憶, 障害,

ajaxはクロスドメインを許していないのでこうするしかない?わけではないけれど(提供会社による)

2019.05.11

Logging

ライブドアが提供している天気予報APIをJSだけで
なんとか出来ないかと思ったので試してみたけれど無理でしたので、
一回、PHPで読み込んでその情報を取得するという事で解決。
昔はYahooがそういう事を提供してたみたいですが
提供終了してました。

<div style="display: table;">
        <div style="display: table-cell;">
            今日の天気::<br>
            <img id="weather_0" src="">
        </div>
        <div style="display: table-cell;">
            明日の天気<br>
            <img id="weather_1" src="">
        </div>
    </div>

 

<script>
$(function(){
    $.ajax({
        type: 'GET',
        //'http://weather.livedoor.com/forecast/webservice/json/v1?city=390010',
        url: 'https://zip358.com/weather/',
        data:null,
        dataType: 'json'
    }).done(function(data){
        $("#weather_0").attr("src",data.forecasts["0"].image.url);
        $("#weather_1").attr("src",data.forecasts["1"].image.url);
    });
});
</script>

タグ

'src', 0, ajax, API, br, display, div, gt, ID, img, JS, lt, php, style, TABLE, table-cell, weather, Yahoo, クロス, ドメイン, ライブドア, わけ, , 予報, , 今日, 取得, 天気, 情報, 提供, 明日, , 終了, 解決,

Standard PHP Library(SPL)というライブラリーには便利な関数が入っている。

2019.04.07

Logging

The Standard?PHP?Library (SPL) は、標準的な問題を解決するためのインターフェイスやクラスを集めたものですと公式ページに書かれている通り
便利な関数です。例としてspl_autoload_registerを紹介。
ぐぐるとどんな機能なのか書かれているので割愛してます。

<?php
spl_autoload_register(function($name){
    include __DIR__ . DIRECTORY_SEPARATOR ."class" . DIRECTORY_SEPARATOR . $name . '.php';
});
$class_demo = new class_demo();

タグ

autoload, class, demo, DIR, DIRECTORY, function, include, Library, lt, name, new, php, register, SEPARATOR, SPL, Standard, The, インターフェイス, クラス, ため, ページ, もの, ライブラリー, , 便利, 公式, 割愛, 問題, 機能, 紹介, 解決, 通り, 関数,

全ての定義済の変数を配列で返す

2019.03.16

Logging

全ての定義済の変数を配列で返す関数です。
全てなのでとってきて欲しくないものまでも取ってきます。
なのでそういうのはunsetします。
ちなみに似たようなのでcompactという関数がPHPには存在します。
何に使用する場合に便利かは人それぞれ違いますが
自分の場合はテンプレートエンジンを使用するときに重宝してます。
テンプレートエンジン・・・TwigやSmartyなど

<?php
$a = "abc";
$b = array(1,2,3);
$c = 123;
$vars = get_defined_vars();
unset($_COOKIE);
unset($_POST);
unset($_GET);
unset($_FILES);
unset($GLOBALS);
foreach ($vars as $key => $value) {
    var_dump($key);
    var_dump($value);
}
//...
var_dump($vars);

 

タグ

, 2, , ABC, array, as, compact, COOKIE, defined, dump, files, foreach, GET, GLOBALS, gt, key, lt, php, POST, Smarty, Twig, unset, value, var, vars, エンジン, それぞれ, テンプレート, とき, もの, , , 使用, 便利, 全て, 場合, 変数, 存在, 定義, 自分, 配列, 重宝, 関数,

Canvasで円がぐるぐる回る。

2019.03.09

Logging

<!DOCTYPE html>
<html>
    <head>
    </head>
<body>
    <canvas id="ctx" ></canvas>
    <script>
            "use strict";
            let x = 0,y = 0;
            let xs = 300,ys = 300;
            let xc = 1,yc = 1;
            let ctx = document.querySelector("#ctx");
            let canvas;
            ctx.width = window.screen.width;
            ctx.height = window.screen.height;
            if(ctx.getContext)
            {
               canvas = ctx.getContext("2d");
               setInterval(draw,77);
            }
            function draw(){
               canvas.beginPath();
               canvas.fillStyle = "#3399ff";
               canvas.arc(x,y,35,0,Math.PI*2,true);
               canvas.globalCompositeOperation = "xor";
               canvas.fill();
                x =((Math.sin (xc) * xs)) + 500;
                y =(Math.cos(yc) * ys) + 500;
                console.log(x + ":" + ctx.width);
                console.log(y + ":" + ctx.height);
                if(x < 0 || x > ctx.width)
                {
                   xs*=-1;
                }
                if(y < 0 || y > ctx.height)
                {
                    ys*=-1;
                }
                if(x<0)
                {
                    x=0;
                }
                if(y<0)
                {
                    y=0;
                }
                if(x > ctx.width)
                {
                    x=ctx.width;
                }
                if( y > ctx.height)
                {
                    y=ctx.height;
                }
                xc+=1
                if(xc>360)
                {
                    xc=0;
                }
                yc+=1
                if(yc>360)
                {
                    yc=0;
                }
            }
        </script>
</body>
</html>

Canvasでぐるぐる円を廻す。
ガラクタコードが少しあります、最初違うコードを書いていたので
これを可変していろいろお試しください。
https://zip358.com/tool/demo5/js/index-3.html

タグ

0, , 300, body, Canvas, ctx, DOCTYPE, document, gt, head, Height, html, ID, let, lt, querySelector, screen, script, strict, use, Width, win, window, xc, xs, yc, YS, ,

javascriptでEVENT処理レベル1

2019.03.09

Logging

<!DOCTYPE html>
<html>
    <head>
    </head>
<body>
    <input type="text" class="zyezyezye">
    <script>
            "use strict";
            let zyezyezye = document.querySelector(".zyezyezye");
            zyezyezye.addEventListener("input",()=>{
                console.log(">おいら>>" + zyezyezye.value);
                if(zyezyezye.value=="じぇじぇじぇ")
                {
                    console.log("おいら>>キタ━━━━(゚∀゚)━━━━!!nおいら>>じぇじぇじぇn<<ストーカーかよ!!");
                }
            });
        </script>
</body>
</html>

jqueryばかり書いているとこういう書き方、書かなくなる。
jqueryから世の中はjavascriptやvue.jsなどへシフトしているそうだけど、未だにjqueryばかり書いている自分です。なれないといけないと思いつつ!?
別のことに力を注いでいる毎日です。
ちなみに「じぇじぇじぇ」は方言で驚きを指す言葉だとか。

タグ

, addEventListener, body, class, console, DOCTYPE, document, EVENT, gt, head, html, if, input, javascript, let, log, lt, querySelector, script, strict, Text, type, use, value, zyezyezye, おいら, レベル, 処理,

PHPの無名関数の使い道が未だにわからないし…

2019.03.09

Logging

<?php
$mumei = function()
{
    if($cnt = func_get_args())
    {
        foreach($cnt as $key=>$value)
        {
            print func_get_arg($key);
        }
    }
};
$mumei(1,2,3,4,5,6);

わからない、未だにわからないし、使う機会が少ないのだけどいったいどこに使うのか。

追記:
2021年の今、無名関数を使ってコードを書くことが増えました、PHP8になりオブジェクト指向が洗練されてきています。今後、無名関数を使用してコードを書くこともあると思います。因みにJSの方が無名関数でコードを書くことが多いですね。

PHPでの無名関数の問題点は、頻繁に無名関数ばかり使用していると他のエンジニアが読みづらく感じる所かもしれません。特にPHPの昔のバージョンになればなる程、読みづらいと思います。

タグ

, 2, 2021, , 4, 5, 6, 8, arg, args, as, cnt, foreach, FUNC, function, GET, gt, if, JS, key, lt, mumei, php, print, value, エンジニア, オブジェクト, コード, こと, どこ, , 今後, , 使い道, 使用, 問題点, , 指向, , 未だ, 機会, 洗練, 無名, 追記, 関数, 頻繁,

ネームスペースの利点はこれだと思っている。

2019.03.02

Logging

ネームスペースの利点はこれだと思っている。
複数人で開発とかしているときに関数名やクラスなどが
かぶってしまう可能性ある、そういうのを
解決してくれるのがネームスペースということです。

<?php
namespace testdemo;
class test{
    function demo():string
    {
        return "demo1n";
    }
}
namespace testdemo2;
class test{
    function demo():string
    {
        return "demo2n";
    }
  }

 

<?php
include_once "./index-6.php";
$demo = new  testdemotest();
print $demo->demo();
$demo = new  testdemo2test();
print $demo->demo();

タグ

'dem, , 2, 6, class, demo, function, include, index, lt, namespace, nbsp, new, once, php, print, return, string, test, クラス, こと, これ, スペース, とき, ネーム, 利点, 可能性, 複数人, 解決, 開発, 関数,

再帰処理の考え方は単なるこれだけのこと。

2019.02.27

Logging

再帰処理の考え方は単なるこれだけのこと。
forやwhile文などでループできない処理の代替えだと
思うとわかりやすいかも。

<?php
print loop(-20);
function loop($i,$ii=1):int
{
    if($i>=5)
    {
        return $i;
    }
    $i++;
    $ii = $ii * $i;
    print "$i=$in";
    print "$ii=$iin";
    if($ii==0)
    {
        $ii = 20;
    }
    return loop($i,$ii);
}

タグ

0, , 20, 5, For, function, gt, if, Ii, int, loop, lt, php, print, return, while, こと, これだけ, ループ, 代替え, 再帰, 処理, , 考え方,

PHP忘れてしまいそう。

2019.02.23

Logging

こういう書き方とか書かなかったら忘れてしまいそうですね。
クラスの多重継承とか職場ではそもそもしない。Functionで十分な感じで
この頃、ろくなコードを書いていません。FunctionからFunctionへなんて
コードを書いてたりしています。
 

<?php
function demo1(int $val=0):int
{
    return 3 * 3 * $val;
}
print demo1(3);
class demo2
{
    public static function test1():string
    {
        return "ABC";
    }
}
$demo2  = "demo2";
print $demo2::test1();
trait demo3
{
    public static function test2($val=""){
        return $val;
    }
}
class demo4
{
    public static function test3($val = "")
    {
        return $val;
    }
}
class demo5 extends demo4
{
    use demo3;
    public static function test4($val = "")
    {
        return $val;
    }
}
$demo5 = 'demo5';
print $demo5::test2(1);
print $demo5::test3(2);
print $demo5::test4(3);

タグ

0, , 2, , ABC, class, demo, function, int, lt, nbsp, php, print, public, return, static, string, test, trait, val, クラス, コード, そもそも, 多重, 感じ, 書き方, 継承, 職場, ,

PHPでバインドするこれでSQLの脆弱性が!?

2019.02.23

Logging

上記の画像では脆弱性がある。
PHPでバインドするこれでSQLの脆弱性が解決してくれる?
こういう記述すると良さげ。
おまけでSQLデバッグ方法を書いとります

<?php
$sql =<<<SQL
select * from demo where id = :id and namae = :hoge;
SQL;
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$id = 123;
$hoge = "hoge";
$sth = $dbh->prepare($sql);
$sth->bindValue(':id', $id, PDO::PARAM_INT);
$sth->bindValue(':hoge', $hoge, PDO::PARAM_STR);
$sth->execute();

タグ

$dbh-&gt, dbh, dbname, execute, hoge, host, localhost, lt, MYSQL, PARAM_INT, PARAM_STR, PDO, php, prepare, SQL, SQL select, sth, test,

WordPressの全記事の中からランダムで記事をピックアップしてツイートする。

2019.02.22

Logging

WordPressの全記事の中からランダムで記事をピックアップしてツイートする。
実際、自分の階層に合わして呼び出しを変更してください。
なお、さくらレンタルサーバーでクロンの設定をして自動投稿できます。
ライブラリの設置などは割愛してます。

<?php
// cron:: cd /home/user/www/zip358.com/site/tw; /usr/local/bin/php tw.php
require_once ('../../wp-load.php');
require "vendor/autoload.php";
use AbrahamTwitterOAuthTwitterOAuth;
$consumer_key = "XXXXXXXXXXXXXX";
$consumer_secret = "XXXXXXXXXXXX";
$access_token = "XXXXXXXXXXXXXX";
$access_token_secret = "XXXXXXXXXXXXXXX";
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
$args = array(
	'posts_per_page' => 1,
    'orderby' => 'rand'
);
$posts = get_posts($args);
foreach ( $posts as $val ){
    $href =  get_permalink($val->ID);
    $title = get_the_title($val->ID);
    $res = $to->post("statuses/update", array("status" => $title . " " . $href));
}

タグ

358, Abraham, access, autoload, bin, cd, com, consumer, cron, home, key, local, lt, once, php, require, secret, site, tok, tw, TwitterOAuth, use, user, usr, vendor, WordPress, wp-load, XXXXXXXXXXXX, XXXXXXXXXXXXXX, zip, クロン, サーバー, さくら, ツイート, ピックアップ, ライブラリ, ランダム, レンタル, , 割愛, 変更, 実際, 投稿, 自分, 自動, 記事, 設定, 設置, 階層,

PHPで怒られる怒られない2

2019.02.17

Logging

PHPで怒られる怒られないの違いはさて何でしょうか?
selfの使い道がポイントです。selfは静的な要素だと動作し
$thisは動的な要素だと動作します。

<?php
class demo1
{
    static function test1()
    {
        return __METHOD__.self::test2();
    }
    static function test2()
    {
        return __FUNCTION__;
    }
}
class demo2
{
    static function  test1()
    {
        return __METHOD__.self::test2();
    }
    function test2()
    {
        return __FUNCTION__;
    }
}
$demo1 = 'demo1';
print $demo1::test1()."n";
$demo2 = 'demo2';
print $demo2::test1()."n";

タグ

, 2, class, demo, FUNC, function, lt, METHOD, php, return, self, static, test, this, ポイント, , 使い道, 動作, 要素, 違い,

PHPのインターフェイスとやら簡単に言えば。

2019.02.16

Logging

インターフェイスとはなんぞや?
簡単に言えばこのメソッド名は必ず使えです。
無ければエラーになります。
大規模な開発から中規模な開発時には一応必要かな?
 

<?php
interface  test1{
    public function test_11(int $val=1);
    public function test_12(string $val="000");
}
class demo implements test1{
    public function demo1(int $val=0){
        return $this->test_11($val);
    }
    public function test_11(int $val=1){
        return $val;
    }
    public function test_12(string $val=""){
        return $val;
    }
}
$demo = new demo();
print $demo->demo1(111);

 

タグ

0, 000, , 11, class, demo, function, gt, implements, int, interface, lt, nbsp, php, public, return, string, test, this, val, インターフェイス, エラー, メソッド, 大規模, 必要, 簡単, 規模, 開発,

PHPで怒られる怒られない。

2019.02.16

Logging

PHPで怒られる書き方と怒られない書き方です。
下記のコードを参照ください。

<?php
class demo_php1{
    function demo1($val=""){
        return $val;
    }
    public function demo2($val=""){
        return $val;
    }
    static function demo3($val=""){
        return $val;
    }
}
print demo_php1::demo1("DEMO1n");
print demo_php1::demo2("DEMO2n");
print demo_php1::demo3("DEMO3n");

下記のようにインスタンス(instance)すればこのコードはすべて怒られないです
それだけの違い。ちなみにdemo3は怒られない書き方です。
オブジェクトを単体で使う場合は気をつけましょう。
PHPのバージョンアップするにつれjavaのような動きになってきています。
PHP、Pythonに負けないようにかこの頃開発が活発化してます。
最新はPHP7.4ですからね・・・。

$demo_php1 = new demo_php1();
print $demo_php1->demo1("DEMO1n");
print $demo_php1->demo2("DEMO2n");
print $demo_php1->demo3("DEMO3n");

タグ

, 2, , class, demo, function, instance, lt, php, print, public, return, static, val, インスタンス, コード, すべて, それだけ, 下記, 参照, 書き方, ,

google NewsをRSSで取得してjsonで返却するPHPプログラム

2018.12.22

Logging

<?php
//$_POST["sh"]...検索キーワード 
if ($_POST["sh"]) {
	$sh = urlencode(@xss_defence($_POST["sh"]));
	$res = simplexml_load_file("https://news.google.com/news/rss/headlines/section/q/$sh/?ned=jp&hl=ja&gl=JP");
	rss($res);
}
function rss(object $obj = null):void
{
	if (isset($obj->channel->item)) {
		if ($obj->channel->item) {
			$cnt = 0;
			foreach ($obj->channel->item as $item) {
				$result[$cnt]["title"] = (string)$item->title;
				$result[$cnt]["link"] = (string)$item->link;
				$result[$cnt]["pubDate"] = (string)$item->pubDate;
				$result[$cnt]["description"] = (string)$item->description;
				$result[$cnt]["source"] = (string)$item->source;
				$cnt++;
			}
		}
	}
	echo json_encode($result);
}

function xss_defence(mixed $val):mixed
{

    if(!isset($val))return false;
    if(is_array($val)){
        foreach ($val as $key => $value) {
            # code...
            $val[$key] = strip_tags($value);
            $val[$key] = htmlentities($val[$key],ENT_QUOTES);
        }
    }else{
        $val = strip_tags($val);
        $val = htmlentities($val,ENT_QUOTES);
    }
    return $val;
}

google NewsをRSSで取得してjsonで返却するPHPプログラムです。
ご自由にご使用ください。

タグ

0, channel-, cnt, com, defence, file, foreach, function, gl, Google, gt, headlines, hl, https, if, isset, item, ja, jp, json, load, lt, ned, News, null, obj, object, php, POST, quot, res, RSS, section, sh, simplexml, urlencode, void, xss, キーワード, プログラム, 取得, 検索, 返却,

さくらレンタルサーバーとかで制限以上のクロンタブ(crontab)を使う方法。

2018.11.08

Logging

さくらレンタルサーバーとかで制限以上のクロンタブ(crontab)を使う方法
10年ぐらいまえのコードを見直して改善したコードが下記になります。
10年前はクラスを使わない方法で構築したのだけど、今回はクラスの概念を
使って構築。ここ何年かで自分のコーディングの技術は上がっているかといえば
そうでもないですが、昔よりかは技術の幅は広がっていると思いたいw
※qiita日付は数年前にUPしたのですけど、コード自体は10年前のコードです。

追記:2022/10/08 修正:詳しくはコチラ
https://qiita.com/question909/items/8f1df9b62ab4fba76243

<?php
//5分刻みに対して有効な無限クローン 処理が負荷の場合どうなるかは知りません。
date_default_timezone_set('Asia/Tokyo');
class cron{

    public function d_m($obj)
    {
            if($obj->m==="*")return true;
            if(preg_match("/,/",$obj->m))return $this->comma($obj->m,date("m"));
            if((int)$obj->m === (int)date("m"))return true;

            return false;
    }

    public function d_d($obj)
    {
            if($obj->d==="*")return true;
            if(preg_match("/,/",$obj->d))return $this->comma($obj->d,date("d"));
            if((int)$obj->d === (int)date("d"))return true;

            return false;
    }

    public function d_H($obj)
    {
            if(preg_match("/\*\/[0-9]{1,2}/",$obj->H)){
                $H = explode("/",$obj->H);
                if((int)$H[1]>0 && ((int)date("H") % (int)$H[1])===0)return true;
            }else{
                if($obj->H==="*")return true;
                if(preg_match("/,/",$obj->H))return $this->comma($obj->H,date("H"));
                if((int)$obj->H === (int)date("H"))return true;

            }
            return false;
    }

    public function d_i($obj)
    {
            if(preg_match("/\*\/[0-9]{1,2}/",$obj->i)){
                $i = explode("/",$obj->i);
                if((int)$i[1]>0 && ((int)date("i") % (int)$i[1])===0)return true;
            }else{
                if($obj->i==="*")return true;
                if(preg_match("/,/",$obj->i))return $this->comma($obj->i,date("i"));
                if((int)$obj->i === (int)date("i"))return true;

            }
            return false;
    }

    //曜日 0=日曜日 6=土曜日
    public function d_w($obj)
    {
            if((int)$obj->w[date("w")]===1)return true;
            return false;
    }

    public  function comma($c="",$t=""){
        if($c==="")return false;
        if($t==="")return false;
        $flg = false;
        foreach(explode(",",$c) as $cc){
            if((int)$cc===(int)$t)$flg = true;
        }
        return $flg;
    }


    public function d_command($obj){
        if($obj->command){
            exec($obj->command . " > /dev/null &");
        }
        return true;
    }

}
if ($argv[1]) {
   $filename = $argv[1];
    if(is_file($filename)){
        $jsn = json_decode(file_get_contents($filename));
        $cron = new cron();
        try {
            foreach($jsn as $obj){
                if($cron->d_m($obj)){
                    if($cron->d_d($obj)){
                        if($cron->d_H($obj)){
                            if($cron->d_i($obj)){
                                if($cron->d_w($obj)){
                                    $cron->d_command($obj);//波動拳{{{{
                                }
                            }
                        }
                    }
                }
            }
        } catch (\Throwable $th) {
            print $th->getMessage();
        }
    }
}

タグ

08, 10, 2022, 39, 5, Asia, class, cron, crontab, date, default, function, if, lt, obj, php, public, qiita, set, timezone, Tokyo, UP, , クラス, クローン, クロン, コーディング, コード, ここ, コチラ, サーバー, さくら, タブ, まえ, レンタル, 下記, 今回, 何年か, 修正, 処理, 分刻み, 制限, 場合, , 技術, 改善, , 方法, 日付, , 有効, 概念, 構築, 無限, 自体, 自分, 負荷, 追記,

たった数行のプログラムでドツボにはまる。

2018.04.14

Logging

<?php
$command = "ls -m img";
exec($command,$val,$chk);
//imglist
$imglist = explode(",",implode("",$val));
if(is_array($imglist)){
    foreach ($imglist as $key => $value) {
        $img64[$key] = base64_encode(file_get_contents("img/".trim($value)));
        $path_parts = pathinfo($value);
        $path_parts['extension']=="jpeg"?"jpg":$path_parts['extension'];
?>
<div><a href="./img/<?=trim($value)?>"><?=$value?></a><br><img src="data:image/<?=$path_parts['extension']?>;base64,<?=$img64[$key]?>"></div>
<?php
    }
}
$obj["imglist"] = implode("\n\n",$img64);

ls -m というコマンドをPHPのexecという関数を使用し
画像リストを取得しようとしてどつぼにハマった・・・。
この関数、exec(“ls -m”)と書くと$valの中に配列として返却されるのだが、複数の配列に別れて返却される。なので一度、implodeを使用して一度、文字列に戻す必要がある。そしてカンマ区切りで再度、文字列分離する。

これでほっと一息つくとアウトだ!
配列化した値の前後に空白部分が入っていたり改行コードが入っていたりして画像を参照することが出来ないのだ。そのため、trim関数を使用して取り除く必要がある。

コマンドを使用して画像をリスト化して参照するメリットは何かと言えば数百枚の画像を列挙するときなどに高速で参照化することが出来るのだ。因みにコマンドでファイルの検索を行うという事なので本領発揮すると思います。

是非、お試しあれ。

タグ

-Command, -m, , 39, 64, array, as, base, chk, contents, encode, exec, explode, extension, file, foreach, GET, gt, if, img, imglist, implode, is, jpeg, jpg, key, ls, lt, parts, path, pathinfo, php, quot, trim, val, value, ドツボ, プログラム, 数行,

素数判定、単純なソース。

2017.06.25

Logging

素数判定、単純なソースを作りましたので
公開します、ちなみに確率的素数判定法ではなく
ほんとに単純明快な方法で作成しましたので自分のパソコンでは
4桁までの処理が限界でした、基本:javascriptで動いています・
ローカルのパソコン性能に左右されます。
ソースを変更して5桁とか試してみるのも良いかもしれません?
サンプルサイト
https://zip358.com/tool/sosu/

function sosu(){
    let sosuno = [2];
    for(let i=3;i<=9999;i++){
        let flg = true;
        if(i%2===0){
            continue;
        }
        for(let ii=2;ii<i;ii++){
            if(ii%2===0){
                continue;
            }
            if(i%ii===0){
                flg = false;
                break;
            }
        }
        if(flg){
            sosuno.push(i);
        }
    }
    document.getElementById("my-textarea").value = sosuno.join(',');
}
document.getElementById("btn").addEventListener("click",sosu);

タグ

$flg, 0, 2, , 4, 5, 9999, continue, For, function, if, Ii, javascript, let, lt, sosu, sosuno, true, サイト, サンプル, ソース, パソコン, ほんと, ローカル, 作成, 公開, 処理, 判定, 判定法, 単純, 基本, 変更, 左右, 性能, 方法, 明快, 素数, 自分, 限界,

PHPの連想配列追加作成方法。んっ

2017.02.11

Logging


PHPの連想配列追加作成方法。
こちらの下記のコードで連想配列が追加可能です。

<form action="rensou.php" method="POST">
    <input name="name" type="text"><br>
    <input name="name2" type="text"><br>
    <input name="name3" type="text"><br>
    <input name="name4" type="text"><br>
    <input name="name5" type="text"><br>
    <input name="name6" type="text"><br>
    <input name="name7" type="text"><br>
    <input type="submit"><br>
</form>
<?php
$_POST = xss_d($_POST);
$array = [];
if(is_array($_POST)){
    foreach ($_POST as $key => $value) {
        if($value<>""){
            $array[$key] = $value;
        }
    }
}
?>
連想配列表示<br>
<textarea style="width: 500px;height: 500px;">
<?php
print_r (count($array)>0)?($array):["値無し"];
?>
</textarea>

<?php
function xss_d($val){
    if(is_array($val)){
        foreach ($val as $key => $value) {
            # code...
            $val[$key] = strip_tags($value);
            $val[$key] = htmlentities($val[$key],ENT_QUOTES);
        }
    }else{

        $val = strip_tags($val);
        $val = htmlentities($val,ENT_QUOTES);        
    }
    return $val;
}

サンプル
https://zip358.com/tool/rensou.php
余談:連想配列よく使います。。。。
そして便利です。こういう追加方法を知らない人も
いると思います。最初に連想配列を設定して終わり・・・。
じぶんもちょっと昔までは追加方法なんて知らなかったです。
知っていると便利です。
あと、ブログですが、こんな感じで
たまに書き込みするようにします。ブログを書かなくなった理由は
ネタがないのではなく。ダラダラ書くより
これは皆さんに伝えたいと思うのだけで良いじゃないかなと
思ったからです。
ぷらす書く時間を他のことにシフトしただけです。
なので、気分が乗る日は書きます・・・よ。

タグ

2, , 4, 5, Action, br, Form, gt, input, lt, METHOD, name, php, POST, quot, rensou, Text, type, コード, こちら, 下記, 作成, 可能, 方法, 追加, 連想, 配列,

ANA旅割逆算日導きサービスモバイル版:最終

2016.05.04

Logging

<!DOCTYPE html>
<html>
    <head>
        <title>ANA旅割逆算日導きサービス(mobile)</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="jquery-mobile/jquery.mobile-1.4.5.min.css">
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans:300,400,700">
    <script src="jquery-mobile/jquery.js"></script>
    <script src="jquery-mobile/jquery.mobile-1.4.5.min.js"></script>
    <style>
        .ui-page{
           background:#73cbe6;
        }
    </style>
    <script>
        $(function(){
            $("#ckday").click(function(){
                //alert($("#day").val().replace(/\-/g,'\/'));
            $.ajax({
                type: 'POST',
                url: "../ana_calendar/json.php",
                data:{day:$("#day").val().replace(/\-/g,'\/')},
                dataType: 'json',
                success: function(obj){
                    var str =   '<ul id="ana_listview" data-role="listview">\n';
                    str = str + '<li>予定日:' + obj.anaday + '</li>\n';
                    str = str + '<li>75日[旅割]の予約期日:' + obj.day75 + '</li>\n';
                    str = str + '<li>55日[旅割]の予約期日:' + obj.day55 + '</li>\n';
                    str = str + '<li>45日[旅割]の予約期日:' + obj.day45 + '</li>\n';
                    str = str + '<li>28日[旅割]の予約期日:' + obj.day28 + '</li>\n';
                    str = str + '<li>21日[旅割]の予約期日:' + obj.day21 + '</li>\n';
                    str = str + '</ul>\n';
                    $("#ana_api").html(str);
                    $("#ana_listview").listview().listview('refresh'); ;
                    }
                });
            });
        });
    </script>
    </head>
    <body>
        <div data-role="page" data-title="ANA旅割逆算日導きサービス(mobile)">
          <!--ヘッダー領域-->
          <div data-role="header">
            <h1>ANA旅割逆算日導きサービス(mobile)</h1>
          </div>
          <div role="main" class="ui-content">
              <input type="date" id="day">
              <button id="ckday" class="ui-btn">逆算する。</button>
              <span id="ana_api"></span>
          </div>
          <div data-role="footer">
            <h3>Copyright zip358.com</h3>
          </div>
        </div>
    </body>
</html>

ANA旅割逆算日導きサービスモバイル版:最終として webから逆算日を導きだすサービスを公開します。
ほんと・・・簡単なものですので 最初からwebで作れたんじゃねぇっていう疑惑が あると思うです。
webゴニョゴニョ…(ノ゚д゚(; ̄Д ̄)っていう誘惑は モバイル版のアプリを作る時からありましたが アプリ作るよって言ったので、有言実行ということで 作ってみました。
作った結果ですけど・・・ ウェブで作れるものはウェブで作ったほうが手間暇かからないという事がわかりました。 http://zip358.com/tool/ana_calendar/?[PC]
zip358.com/tool/ANAmobile/?[モバイル] ?

タグ

1.0, 1.4.5, 8, ANA, charset, content, css, device-width, DOCTYPE, gt, head, href, html, http, initial-scale, jquery, jquery-mobile, link, lt, meta, min, mobile, name, quot, rel, stylesheet, title, UTF-, viewport, Width, サービス, モバイル, 旅割, 最終, 逆算,