投稿

5月, 2024の投稿を表示しています

PHP7.4 → 8.x でリダイレクト header('location: ...'); 以降が処理されるようになった

PHP7.4 から 8.x への切り替えで遭遇した不具合メモ とあるライブラリで header('location: ...'); の記述があり、その後の処理はリダイレクトされ、実行されない前提で書かれていたが PHP7.4 から 8.x へ移行したら、locationヘッダ出力以降も処理され、思わぬ動作に ブラウザへの出力タイミングが変わったのかもしれません(ある程度まとめて出力とか)

PWA(progressive web app)でリンクを標準ブラウザで開けない

PWA(プログレッシブウェブアプリ)でリンクを標準ブラウザで開けない リンクタグに下記のオプションを付けても効果なし target="_blank" rel="noopener noreferrer" A.I.系に聞いても上記を教えてくれるので、以前はできたのでしょう となると manifest の scope で制限するくらいしか方法が無くなりますが、同一ドメインやサブディレクトリだと詰んでしまいます 考えつくことといえば、他ドメインにジャンプ用のhtmlを置いてリンク先のURLをパラメータで渡すくらいでしょうか <script language="javascript"> var url = location.href.match(/\?(.*)/); if( url != null ){ location.href = url[1]; } </script> https://example.com/jump.html? https://example.net/

さくらのレンタルサーバでWAFを有効にすると Cookie が引き継がれない、他

イメージ
 さくらのレンタルサーバで(しつこくオススメ表示されるので)WAFを有効にしたところ サイトのセッション情報が引き継がれず、全てログアウト状態 作成される php のセッションcookieも PHPSESSID から ENC_PHPSESSID に変わっている... 条件に Cookieの引き継ぎは不可です と書いてありました WAFオンの状態で、ブラウザから cookie を確認すると、オン以降全てのcookie名に ENC_ が付与され、暗号化されます デバッグ時にブラウザから cookieの確認ができないのは辛いですな... WAFをオフにすれば、ブラウザ側の cookieは有効期限まで残っているので、もとに戻せます

同じ行に左右、左右中央 のdivを置くcss

一行の中に左右、左-中央-右 のdivを置くcss 左・右 <div> <div style="float:left;">left</div> <div style="text-align:right;">right</div> </div> 左・中央・右 <div style="display:flex; justify-content:center; position: relative;"> <div style="position:absolute; left:0">left</div> <div>center</div> <div style="position:absolute; right:0">right</div> </div> 後者は center の div 必須です

ソフトポーズやハードポーズが機能しない通話(番号)

 携帯電話などの通話開始後、あらかじめ登録したPB信号を送出する、ソフトポーズやハードポーズが機能しない通話がある ソフトポーズ(,) = 一定時間後に送出する ハードポーズ(;) = 端末操作により送出 着信課金(0120, 0800)のフリーコール(フリーダイヤル等)や災害伝言ダイヤルがそれで これらは、発信側に課金開始の情報(アナログ回線で言えば、レバース)が送られてこないため、端末側が呼び出し状態なのか通話状態なのか判断できておらず、ポーズ機能の開始を判断できていないためと思われる ちなみに、呼び出し時のリングバックトーンは被呼側から送られてきており(例 ソフトバンク携帯のププッという冒頭音)その延長と端末が判断している可能性がある

mysqli から View を select しても結果が得られない

PHP で mysqli ( prepare )を使用して、SELECTにビューを指定したが、結果が得られなかった さくらのレンタルサーバ上 mysql 5.7, php 8.0.30 phpMyAdmin からは表示可能(ビューをそこで作成したからね) テーブルと単純なビューを作成して確認 → ビューのみ結果が得られない mysql側の権限を疑ったが、レンタルサーバにビューの詳細な設定はなし mysqli のオプションを確認するが、それっぽいのは見つからず 「mysqli view select not working」等で調べるとかなり古くから問題がある様子 PDOを使って解決 とか、そんな中  prepare 以外は動作する みたいな話を発見 確認したら PDO で確認 → OK mysqli::query  で確認 → OK mysqli + prepare + View という組み合わせがNGらしい 他を mysqli で作っていたので mysqli:query を使用することにしました ※インジェクション対策 mysqli_real_escape_string() で文字列のエスケープを忘れずに

javascript の fetch で json を受け取る

javascript の fetch で json を受け取る 下記のようなjsonを受信する場合 { "title": "タイトル", "body": "本文" } response.json() では素のテキストでもなく、配列でもなさそうなので fetch(url) .then((response) => { return response.json(); }).then((json) => { console.log(json.title); }) という感じで受け取る

Delphi の record ポインタの Dispose で文字列が開放されない

Delphi の record ポインタの Dispose で文字列が開放されない ListView Item の Data へポインタとしてレコード型を投入、OnDeletion で開放というコード type TItemRec = record Name, Value: string; end; PItemRec = ^TItemRec; var ItemRec: TItemRec; PItem: PItemRec; // 文字列投入 ItemRec.Name := 'key'; ItemRec.Value := 'val'; New(PItem); PItem^ := ItemRec; ListItem := ListView1.Items.Add; ListItem.Data := PItem; // Dataへポインタを投入 // リスト削除時に開放 procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem); begin if (Item.Data <> nil) then begin Dispose(Item.Data); end; end; このコード、文字列2つが開放されない Dispose で元のレコード型にキャストして開放すればよいらしい procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem); begin if (Item.Data <> nil) then begin Dispose(PItemRec(Item.Data)); end; end;