@Blog{zip358.com}
日常日誌からプログラムやYOUTUBER紹介、旅日記まで日々更新中です。
任意のディレクトリ連番を調べてURLを返却する.
2024.06.21
おはようございます、任意のディレクトリ連番を調べてURLを返却するPHP言語のコードです.このコードは昨日に書いた記事を読んで頂けたら分かると思いますが、ある配下のディレクトリ名が連番で名前付けしていたら、その連番のディレクトリを確認してindex.phpかindex.htmlが存在したらindexページを返却し無ければ、そのディレクトリ内にあるphpファイルのリンクアドレスを返却するようになっています.
<?php
class lists
{
public $toolDir;
public $toolUrl;
public function __construct($toolDir = __DIR__ . '/../', $toolUrl = 'https://zip358.com/tool/')
{
$this->toolDir = $toolDir;
$this->toolUrl = $toolUrl;
}
public function getList($dir = 'demo', $max = 999)
{
$response = [];
for ($i = 0; $i <= $max; $i++) {
$demoDir = $dir . ($i ?: '');
if (file_exists($this->toolDir . $demoDir . '/index.php')) {
$response[] = $this->toolUrl . $demoDir . '/';
} elseif (file_exists($this->toolDir . $demoDir . '/index.html')) {
$response[] = $this->toolUrl . $demoDir . '/';
} else {
$filelist = scandir($this->toolDir . $demoDir, 1);
foreach ($filelist as $file) {
$fileInfo = pathinfo($file);
$basename = $fileInfo["basename"];
$filename = $fileInfo["filename"];
if ($basename != $filename && $fileInfo["extension"] == "php") {
$response[] = $this->toolUrl . $demoDir . '/' . $filename . '.php';
}
}
}
}
return $response;
}
}
<?php
require 'lists.php';
$res = (new lists())->getList();
使用する場合はindex.php側を呼び出してご自身のディレクトリ構造とURLなどに合わしてご使用ください.尚、変数の$resには配列が返却されます.
明日へ続く.
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
$basename, construct, DIR, else, elseif, file_exists, filename, foreach, getList, gt, lt, pathinfo, php require, public, res, response, return, toolUrl, 連番, 配下,
もうすぐ10月です。華金は技術ネタ。
2023.09.29
おはようございます、ドメインの引っ越しをしていてネームサーバーの確認とかしたい場合があると思います、そういう時はターミナルかPowerShellを開いてこんな感じにCommandを打つといま、どちらのネームサーバーに偏っているかが分かります。
nslookup -type=ns example.com
ちょっとしたことですが、知っていると便利にサーバー移行出来ますよ。あとサーバー移行時にサーバーとサーバーを繋いで、データを転送する方法などもあります。
scp -r user@remoteHost:/remote1/dir /remote2/dir
これで転送する時の要注意は、隠しファイルを転送できたかどうかです。オプションでファイル時刻やパーテーションなどもそのまま引き継いで転送することが可能です。昔、このブログでも取り上げた事がある話なので、知っている人は知っている話かと思いますが、一応、今回、久しぶりにサーバー移行をしたので、その時の技術的な話でした。
オマケ:この頃思うのですが、SSLが当たり前になって無料SSLで運営しているひとが多くなったと思いますが、VPSからVPSなら比較的にサーバー移行は楽ですが、それ以外、VPSからレンタルサーバーへとかの場合は一旦、SSLを無効にして移行するしか出来ないかなと思っているのですが、どうすればスムーズに移行することが可能なのかな?
明日へつづく😌。
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
-Command, DIR, example.com, ns, nslookup, r user@remoteHost, remote1, remote2, SCP, type, VPS, オマケ, サーバー, ターミナルかPowerShell, ネームサーバー, パーテーション, ひと, レンタルサーバー, 一旦, 要注意,
Laravelのスケジュール覚書、初心を忘れずに。#chatGPTの罠
2023.04.18
おはようございます、laravelのスケジュールを触ってみて。躓いた点は一点だけ。スケジュールリストに登録されているけど、動作しなかった。chatGPT3の罠に引っかかりました。chatGPTはもっともらしいコードを書いてくれるけど、たまに動作しないコードも出力されます。それにまんまと引っかかり、沼から出てこれなくなる所でした。
Laravelはお利口さんだから、上手くやってくれるだろうとJob側のコンストラクタには何も記述しなかったのが間違い。コマンドで行わない場合は下記の記述は絶対らしい。
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Http;
class WebsiteMonitor implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
}
public function __invoke()
{
$this->handle();
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//行いたい処理🐺
}
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use App\Jobs\WebsiteMonitor;
class Kernel extends ConsoleKernel
{
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// どちらでもOK👉 $schedule->job(new WebsiteMonitor)->everyFifteenMinutes();
$schedule->call(function () {
dispatch(new WebsiteMonitor());
})->everyFifteenMinutes();
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
行いたい処理を書いたら、カーネルに処理を登録してcronに下記のように記述する。
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
これで処理が定期的に実行されます。尚、参考サイトとしてこちらに詳しい情報が書かれています。
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
call, ChatGPT, construct, cron, dev, DIR, dispatch, everyFifteenMinutes, handle, IlluminateConsoleSchedulingSchedule, InteractsWithQueue, Laravel, load, PARAM, Queueable, routes, Schedule, SerializesModels, コンストラクタ,
All in One SEO一括、自動入力したった。
2020.07.16
All in One SEO一括、自動入力したった。そのままです。SEO入力欄にデータを流し込みました。前処理として記事のID番号を列挙してJSONで保存しそのIDデータを使用してSEOタイトル、SEO ディスクリプション、SEO キーワードに記事のタイトル、記事内容、タグをそれぞれ流し込みました。この結果は数ヶ月ぐらいかかると思いますが、良い方向に動いていほしいものです。
ここではJSONデータは記載していませんがプログラム処理から想像出来るかと思います。
<?php
date_default_timezone_set("Asia/Tokyo");
require_once(__DIR__ . '/../wp-load.php');
class db{
public $db = NULL;
function __construct()
{
$this->db = new PDO('mysql:dbname=DBNAME;host=HOST;charset=utf8;', 'USER', 'PASS');
}
public function tbl_update($id,$title,$comment,$keyword){
//
$sdb = $this->db->prepare("select * from wp_postmeta where wp_postmeta.post_id = :id and wp_postmeta.meta_key='_aioseop_title';");
$sdb->bindParam(":id",$id,PDO::PARAM_INT);
$ret = $sdb->execute();
var_dump($sdb->rowCount());
if($sdb->rowCount()){
$sdb = Null;
$sdb = $this->db->prepare("UPDATE wp_postmeta set wp_postmeta.meta_value = :title where wp_postmeta.post_id = :id and wp_postmeta.meta_key='_aioseop_title';");
}else{
$sdb = Null;
$sdb = $this->db->prepare("INSERT INTO wp_postmeta(post_id,meta_key,meta_value) VALUES (:id,'_aioseop_title',:title);");
}
$sdb->bindParam(":id",$id,PDO::PARAM_INT);
$sdb->bindParam(":title",$title,PDO::PARAM_STR);
$ret = $sdb->execute();
//
//
$sdb = $this->db->prepare("select * from wp_postmeta where wp_postmeta.post_id = :id and wp_postmeta.meta_key='_aioseop_description';");
$sdb->bindParam(":id",$id,PDO::PARAM_INT);
$ret = $sdb->execute();
if($sdb->rowCount()){
$sdb = Null;
$sdb = $sdb = $this->db->prepare("UPDATE wp_postmeta set wp_postmeta.meta_value = :comment where wp_postmeta.post_id = :id and wp_postmeta.meta_key='_aioseop_description';");
}else{
$sdb = Null;
$sdb = $this->db->prepare("INSERT INTO wp_postmeta(post_id,meta_key,meta_value) VALUES (:id,'_aioseop_description' ,:comment);");
}
$sdb->bindParam(":id",$id,PDO::PARAM_INT);
$sdb->bindParam(":comment",$comment,PDO::PARAM_STR);
$ret = $sdb->execute();
//
//
$sdb = $this->db->prepare("select * from wp_postmeta where wp_postmeta.post_id = :id and wp_postmeta.meta_key='_aioseop_keywords';");
$sdb->bindParam(":id",$id,PDO::PARAM_INT);
$ret = $sdb->execute();
if($sdb->rowCount()){
$sdb = Null;
$sdb = $this->db->prepare("UPDATE wp_postmeta set wp_postmeta.meta_value = :keyword where wp_postmeta.post_id = :id and wp_postmeta.meta_key='_aioseop_keywords';");
}else{
$sdb = Null;
$sdb = $this->db->prepare("INSERT INTO wp_postmeta(post_id,meta_key,meta_value) VALUES (:id,'_aioseop_keywords' ,:keyword);");
}
$sdb->bindParam(":id",$id,PDO::PARAM_INT);
$sdb->bindParam(":keyword",$keyword,PDO::PARAM_STR);
$ret = $sdb->execute();
$sdb = Null;
$this->db = Null;
return "{'id':$id,'title':'$title','comment':'$comment','keyword':'$keyword'}";
}
}
//$_POST["ID"] = 9541;
$obj = (object)json_decode(file_get_contents("./postid.json"));
foreach($obj->rows as $key=>$val){
$ID = (int)$val->ID;
$page = get_post($ID);
$title = mb_strimwidth($page->post_title,0,60,"…");
$content = $page->post_content;
$content = wp_strip_all_tags( $content );
$content = mb_strimwidth(strip_shortcodes( $content ),0,160,"…");
$keyword = array();
$posttags = get_the_tags($ID);
if ( $posttags ) {
foreach ( $posttags as $tag ) {
$keyword[] = $tag->name;
}
}
$DB = new db();
print count($keyword)>0?$DB->tbl_update($ID,$title,$content,implode(",",$keyword)):$DB->tbl_update($ID,$title,$content,"");
$DB = Null;
}
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
39, all, Asia, class, construct, date, db, default, DIR, function, ID, in, json, lt, null, once, one, php, public, quot, require, SEO, set, timezone, Tokyo, wp-load, キーワード, ここ, それぞれ, タイトル, タグ, データ, ディスクリプション, プログラム, もの, 一括, 使用, 保存, 入力, 入力欄, 内容, 処理, 列挙, 前処理, 想像, 数, 方向, 番号, 結果, 自動, 記事, 記載,
WPの記事を検索し一括カテゴリ変更する方法。
2020.05.25
WPの記事を検索し一括カテゴリ変更する方法は下記になります。ワードプレスのwp-load.phpを読み込み、下記のようなソースコードのファイルをcommandで実行すると、カテゴリが任意のカテゴリに変更されます。
重要点はwp_set_post_categoriesの引数です。arrayの配列の数値ですが、この数値をカテゴリIDのナンバーに変更することによってカテゴリが更新されます。
企業でご使用する場合はカテゴリ更新部分を一度、コメントアウトしCSVか何かでうまく記事が抽出できているか確認した後に、更新するようにお願い致します、当然ながら不具合等の苦情は受け付けません。自己責任でご使用くださいな。
尚、この下記のコードの意味がわからないという方は下記のURLからそれぞれのワードプレスようのメソッドが何を意味しているか調べてくださいね。
https://elearn.jp/wpman/
<?php
require_once(__DIR__ . '/../wp-load.php');
if ($argv[0]) {
$args = array(
'post_type ' => 'post',
'posts_per_page' =>-1,
's' => '映画'
);
$posts = get_posts($args);
foreach ($posts as $val) {
$href = get_permalink($val->ID);
$title = get_the_title($val->ID);
$cnt++;
echo $cnt.":".$title."\n".$href."\n";
wp_set_post_categories($val->ID,array(1,2,3));
}
}
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
-Command, 39, array, categories, CSV, DIR, ID, lt, once, php, POST, require, set, url, wp, wp-load, アウト, お願い, カテゴリ, コード, こと, コメント, ご使用, ソース, それぞれ, ナンバー, ファイル, プレス, メソッド, ワード, 一度, 一括, 下記, 不具合, 任意, 企業, 何, 何か, 使用, 場合, 変更, 実行, 引数, 当然, 後, 意味, 抽出, 数値, 方, 方法, 更新, 検索, 確認, 自己, 苦情, 記事, 責任, 部分, 配列, 重要点,
画像ファイル系一覧のパスを列挙するバッチ
2019.08.17
setlocal enabledelayedexpansion
type nul >imglist.txt
set BEFORE_STRING=
set AFTER_STRING=/
set BEFORE_STRING2=F:/
set OUTPUT_FILE=imglist.txt
for /f %%a in ('dir /a-d /s /b *.jpg.webp *.gif') do (
set line=%%a
set RES=!line:%BEFORE_STRING%=%AFTER_STRING%!
echo !RES:%BEFORE_STRING2%=!>>%OUTPUT_FILE%!
)
endlocal
画像ファイル系一覧のパスを列挙するバッチです。
ググりながら作ってみました。
ちなみに勘所はsetlocal enabledelayedexpansion(endlocal
)と!です。
どうもforの中の変数をセットするタイミングが関係しているので
上記の文言を使用しないとうまく取り出す事が
できないようです。
遅延環境変数とかいうそうですね。。。
あまり理解していないけれどもorz
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
2, a-d, AFTER, BEFORE, DIR, do, echo, enabledelayedexpansion, endlocal, file, For, gif', gt, imglist, in, jpg, line, nul, OUTPUT, res, set, setlocal, string, txt, type, パス, バッチ, ファイル, 一覧, 列挙, 勘所, 画像,
Standard PHP Library(SPL)というライブラリーには便利な関数が入っている。
2019.04.07
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();
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
autoload, class, demo, DIR, DIRECTORY, function, include, Library, lt, name, new, php, register, SEPARATOR, SPL, Standard, The, インターフェイス, クラス, ため, ページ, もの, ライブラリー, 例, 便利, 公式, 割愛, 問題, 機能, 紹介, 解決, 通り, 関数,