laravel非ログインならユーザー登録を出さない

管理画面用ならばデフォルトの逆なので、ログインユーザーのみが新規登録出来るようにする

[./app/Http/Middleware/RedirectIfAuthenticated.php]



foreach ($guards as $guard) {
    
    if($_SERVER['REQUEST_URI'] == '/register' ) {
        // 会員作成なら
        if (Auth::guard($guard)->check()) { 
            return $next($request);
        }else{
            //ログインしてなければリダイレクト
            return redirect(RouteServiceProvider::HOME);
        }
    }else{
        
        if (Auth::guard($guard)->check()) { 
            //ログイン中ならtrue
            return redirect(RouteServiceProvider::HOME);
        }
    }
}

mb_convert_kana 濁点の結合 かな、カタカナ混在




$str = 'ぐボピ.png';
$strs = mb_str_split($str);
$strs = array_reverse($strs);
$nextkey = -1;

foreach ($strs as $key => $str) { //かな true
  if(preg_match("/^[ぁ-ん]+$/u",$str)){
    $kana = true;
  }else{
    $kana = false;
  } 

  if(preg_match("/゙|゚/",$str)){ //濁点なら保存
    $dakten = $str;
    $nextkey = ++$key;
    continue;
  }
  
  if($key == $nextkey){ //濁点なら次の文字の後ろに連結
    $str .= $dakten; 
  }
  
  $str = dakten_replace($str); //置換 濁点も一文字になってる
  
      
  if( $kana ) {  // 元が "かな" ならかなに戻す
    $str = mb_convert_kana($str, 'c', 'UTF-8');
  }

     $newstrs[] = $str ; 
}

$strs = array_reverse($newstrs);
$str = implode('',$strs);
  var_dump($str);

  function dakten_replace ($str){
    $str = str_replace('゙','゛' ,$str); //全角濁点を半角に
    $str = str_replace('゚','゚' ,$str);
    $str = mb_convert_kana($str, 'hkV', 'UTF-8');
    $str = mb_convert_kana($str, 'HV', 'UTF-8');
    $str = mb_convert_kana($str, 'C', 'UTF-8');
    return $str;
  }


string(13) “ぐボピ.png”
$str = ‘ぐボピ.png’;
比較しても見た目ではわからない。

濁点はひらがなでもカタカナでもないが、かなとカタカナは等しい

LINE Messaging APIで phpから Pushメッセージを送信する

1. LINE for Bussinessを用意する

LINE Messaging APIを使用するには Line Developers に登録する必要があります。
LINE Bussiness ID を作る

次に LINE Bussiness アカウントとLINEアカウントを連携します。
連携するURL

2. LINE Messaging APIを設定する

channelをつくる

Webhookを設定

Webhook settings の 「Edit」 をクリックし、公開しているWebhookURLを設定します。

Channel access tokenを有効化

Messaging APIの下部にある「Channel access token」の「Channel access token (long-lived) 」から「Issue」をクリック。

つくったchannelをお友達登録する

Messaging API 管理画面から作ったチャンネルのQRコードを表示してお友達登録する



    // LINE Messaging API プッシュメッセージを送る
    $LINE_PUSH_URL = "https://api.line.me/v2/bot/message/push";


    $LINE_CHANNEL_ACCESS_TOKEN = 'ZXCVFDSA*******************'; 

    // Your user ID
    // Messaging API 管理画面で確認 これくらいながいやつ
    $LINE_USER_ID = "U3**********************";

    // 送信するメッセージ
    $message_1 = "こんにちは API";
    $message_2 = "PHPからPUSH送信\r\n改行して2行目";

    // リクエストヘッダ
    $header = [
        'Authorization: Bearer ' . $LINE_CHANNEL_ACCESS_TOKEN,
        'Content-Type: application/json'
    ];

    // 送信するメッセージの下準備
    $post_values = array(
        [
        "type" => "text",
        "text" => $message_1
        ],
        [
        "type" => "text",
        "text" => $message_2
        ]
    );

    // 送信するデータ
    $post_data = [
        "to" => $LINE_USER_ID,
        "messages" => $post_values
        ];

    // デバグ確認用のログ:送信データ
    $file = '/tmp/post_data.txt';
    file_put_contents($file, json_encode($post_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), FILE_APPEND);
    file_put_contents($file, PHP_EOL.PHP_EOL, FILE_APPEND);

    // cURLを使った送信処理の時は true
    // file_get_contentsを使った送信処理の時は false
    $USE_CURL = true;

    if ($USE_CURL) {
        // cURLを使った送信処理
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $LINE_PUSH_URL);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($post_data));
        $result = curl_exec($curl);
        curl_close($curl);
    }
    else
    {
        // file_get_contentsを使った送信処理
        $context = stream_context_create(array(
            'http' => array(
                'method' => 'POST',
                'header' => implode("\r\n", $header),
                'content'=>  json_encode($post_data),
                'ignore_errors' => true
            )
        ));

        $result = file_get_contents(
            $LINE_PUSH_URL,
            false,
            $context
            );
    }

    // デバグ確認用のログ:受信レスポンス
    $file = '/tmp/result.txt';
    file_put_contents($file, $result, FILE_APPEND);
    file_put_contents($file, PHP_EOL.PHP_EOL, FILE_APPEND);

Apache php mac 設定

 
Macでターミナル起動

which httpd
	/usr/sbin/httpd ←ここに入ってる

sudo apachectl start	←Apache起動	

ブラウザ
	http://localhost/

Apache設定変更
	sudo vi /etc/apache2/httpd.conf
	
  コメントを外す
	 LoadModule rewrite_module libexec/apache2/mod_rewrite.so 
	 LoadModule php7_module libexec/apache2/libphp7.so

  ユーザーを自分にする
	 User ginzo
	 Group _www

   DocumentRoot を確認

   <Directory "/Library/WebServer/Documents"> 内に追記
    AllowOverride All  
    Options Indexes
    Order allow,deny
    Allow from all
    Require all granted


Apache再起動
  sudo apachectl restart

ドキュメントルートの所有者を変更
  cd /Library/WebServer
  ls -l
  	drwxr-xr-x  6 root  wheel  192 10 10 12:55 Documents	
  rootなので自分にする
    sudo chown ginzo:_www  Documents

Documentsにinfo.php作成 
  [中身]
  <?php 
    phpinfo();

 ファインダーで Shift+Command+G
   Library/WebServer/Documents と入れて開く
    保存したファイルが有るか確認

 ブラウザで開く
    http://localhost/info.php

MySQL設定

 mysqli.default_socket の場所を確認
   mysql_config --socket 
   /tmp/mysql.sock 

info.php で表示されてる場所と違うので php.iniを編集する
   sudo cp /etc/php.ini.default /etc/php.ini
   sudo vi /etc/php.ini
   mysqli.default_socket =  この行を探して こうする↓
   mysqli.default_socket = "/tmp/mysql.sock"

保存して、Apache再起動

 

DOMパース php

 
[highlight_php]

$url = 'https://ultimai.org/wp';
$html = file_get_contents($url);

$doc = new DOMDocument();
$doc->loadHTML($html);

$xmlString = $doc->saveXML();
  $xmlObject = simplexml_load_string($xmlString);
	  $html = json_decode(json_encode($xmlObject), true);
	var_dump($html);exit;		

[/highlight_php]


 

Oct 1-12 ,Fri 12:22 のフォーマット済みの日付を日付型に逆フォーマットするやつ

 
date_default_timezone_set('America/Los_Angeles');
// 計算するので現地の時間でやる
$usweek = ['Sunday'=>0,'Monday'=>1,'Tuesday'=>2,'Wednesday'=>3,'Thursday'=>4,'Friday'=>5,'Saturday'=>6];
$usmonth = ['Jan'=>1,'Feb'=>2,'Mar'=>3,'Apr'=>4,'May'=>5,'June'=>6,'July'=>7,'Augt'=>8,'Sept'=>9,'Oct'=>10,'Nov'=>11,'Dec'=>12,];

$ending = 'Friday at 11:21PM PDT';  //  入力例1
$ending = 'Oct 12 at 5:14PM PDT';   //      2
$ending = 'Today at 11:57PM PDT';   //      3

$endings = explode(" ", $ending);
$now = new DateTime();

if( array_key_exists( $endings[0] ,$usweek )){
  // 曜日から始まってる
    $apm = substr($endings[2], -2);
    $hmt = str_replace($apm ,'' , $endings[2]);
    $w = date('w', $now->getTimestamp());  //今日の曜日  4 
    $deff = $usweek[$endings[0]] - $w;    //1 日後
    echo date("Y-m-d",strtotime("+$deff day"))," " , date('H:i',strtotime($endings[2])),"
";   //17:21 ok

}elseif(array_key_exists( $endings[0] ,$usmonth )){
    $endday = $usmonth[$endings[0]].'-'. $endings[1].' '. date('H:i',strtotime( $endings[3]));
    if(date("m-d H:i") < $endday){
      echo date("Y") .'-'.$endday;
    }else{ 
      echo date("Y",strtotime("+1 year")).'-'.$endday;
    }
}elseif( $endings[0] == 'Today'){
    echo date("Y-m-d")." " . date('H:i',strtotime($endings[2])) ;
}