You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
お客さま各位 平素よりさくらインターネットに格別のご愛顧を賜り、誠にありがとうございます。 さくらのレンタルサーバにおけるPHP提供ポリシーを、2023年9月14日(木)より変更いたします。 詳細は下記をご参照ください。 さくらインターネットでは、今後もよりよいサービスの提供が行えますよう、精一杯努めてまいります。引き続き変わらぬご愛顧を賜りますようお願い申し上げます。 PHP提供ポリシーの変更内容 以下の2点について提供ポリシーを変更いたします。 1.PHPのセキュリティサポート終了後について 変更前 該当バージョンの提供を終了 変更後 該当バージョンの提供を継続 ※提供を終了する例外対応がございますので、ご注意ください。 2.マイナーバージョンアップ時について 変更前 通知から一定期間後に自動でバージョンアップ 変更後 お客さま自身でバージョンアップ これまでは自動でバージョンアップを
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
社内の方も社外の方もこんばんは。2015年度新卒入社したmekkooです。 Advent Calendarの季節です。街には色があふれていますね。 僕はひたすら画面を見つめているのですが、最近感動したUIがあります。 iTunesに最近搭載された... 美しい。かっこいい! 没頭できる。アルバムアートをちゃんと設定しようという気になる。 PHPで再現して、メディアに取り入れてみたい… PHPでClassを作ってみよう! 画像色抽出どうすればいいか考えた 画像をオブジェクトとして読み込んで phpなら、imagecreatefrom*() 関数 左上から右下へ、ピクセルを走査していく? 大きな画像の場合、10px毎とかでスキップしながらでもいいかも 最終的に、カラーコードの平均を取る? 実際にやってみた <?php class SenseOfColor { private $filepath
見つけられた範囲で読めないデータを提示している情報源は以上の3つだけだったが、データの提示なしにsetlocaleを使うことを推奨する記事はかなりの数があった。 本当にfgetcsvはsetlocaleしないとだめなのか? 手元のPHP環境(PHP 7.1)ではsetlocaleをしなくてもfgetcsvで問題なくデータが読み込めていたので、 fgetcsvはsetlocaleしないと読めないデータがあるというのは本当なのかという疑問が生まれた。 一応、macOS上のPHPだけでなく、Alpine Linux(localeがない)やUbuntu(localeがC)でも試したが再現しなかった。 また、SJISのCSVでも再現しなかった。 仮説: PHPのあるバージョンからロケール問題がなくなった fgetcsvでロケールの調整が必要とする記事がPHP5時代のものが多かったので、もしかするとP
1-2. 初期化&代入 1-2-1. 1次元の配列 PHP においては「添字配列(キーが非負整数である配列)」と「連想配列(キーが文字列である配列)」の間に違いはなく、配列型は 1 つだけで、 同じ配列で整数のインデックスと文字列のインデックスを同時に使えます。 添字配列の例
インクリメントとデクリメントは前置//遅い $i++; $i--; //早い ++$i; --$i; 約1.24倍の高速化 型変換は関数よりキャストする//遅い $tmp = intval($val); //早い $tmp = (int)$val; 約2.1倍の高速化 数字(not数値)を計算で使うなら事前にキャストする//遅い $val = '1'; $tmp = 0; $tmp += $val; //早い $val = '1'; $val = (int)$val; $tmp = 0; $tmp += $val; 約1.7倍の高速化 グローバル変数より定数を使う//遅い $GLOBALS[ 'MIZUKI' ] = 7; $tmp = ''; $tmp = $GLOBALS[ 'MIZUKI' ]; //早い define( 'hoge', 7 ); $tmp = ''; $tmp =
お絵かき掲示板POTI-board改二は、PHP5.5からPHP8.xで動作するPHPスクリプトをめざして開発をすすめています。 PHP8は2020年11月にリリースされました。 PHP8でもPOTI-board改二は動作しますか? 重大な問題が2点みつかりました。 その2点の問題を修正した、PHP8対応版を2021年1月2日に公開しました。 PHP8対応版へのアップデートを私達はPHP8でも動くように注意深くお絵かき掲示板の開発をすすめてきました。 しかし…。 1つ目の問題。 お絵かきした画像が投稿できなくなる問題がみつかりました。 お絵かき掲示板の動画保存機能が動作している時には発生しないエラーだったため発見が遅れました。 画像から続きを描いたり、アニメーション記録のチェックを外して描くと「画像がありません」というエラーになります。 2つ目の問題。 投稿ボタンを押したあとのHTMLファ
ドワンゴで、ニコニコ動画とプレミアム課金の開発をしている @yoshikyoto です。 最近では、総合TOPのリニューアルや、↓の記事で書かれているプレミアム課金の移行をやっていました。 ニコニコで12年運用した決済システムを移行する上で必要だったこと レガシーなPHPを改善してきた知見 ニコニコは古くからあるサービスで、レガシーなコードも多く存在しています。 僕は新卒でニコニコ動画に配属され、5年間ずっと PHP を触ってきました。その中で、多くの新機能の開発、古いコードのリファクタリング、いろいろやってきました。その知見をまとめます。 Composer, Laravel (フレームワーク)の導入 PHP を使っていて Composer を導入していないシステムは珍しい思いますが、10年もののシステムには、Composer が導入されていない場合もあります。導入されていないなら導入しま
さて、前回記事「PHPでメモリ上に一時ファイルを作る」では、file_get_contents関数でCSVファイル全体を取得して文字エンコーディングの変換を行い、変換結果に対してfgetcsv関数を利用しました。しかし、CSVファイルが巨大な場合にはfile_get_contentsを使うとメモリ上限に引っかかってPHPが停止してしまいます。 もちろん、UTF-8のCSVファイルに対してfgetcsvを利用するのであれば、どんな大きなCSVファイルだろうと処理することが可能です。なぜなら、fgetcsvはファイルを1行単位で読み込む関数ですから、1行分のメモリ消費だけでファイル全体を読み込み続けられるからです(正確にはストリーム上のデータはバッファリングされるので、バッファサイズ分のメモリは消費しますが)。 それでは、巨大なSJISのCSVファイルをfgetcsvで処理したい場合はどうすれ
fgetcsvでShift-JIS文字コードのCSVを読むと、文字列がShift-JISのままの配列が返ってくるため、UTF-8を基本的な文字コードに据えたシステムでただ不便というだけにとどまらず、SJISのCSVをfgetcsvで直接読み取るのは「5C問題」のため危険である。 本稿では、ストリームフィルタを使ったSJIS CSVの安全な読み込み方法を紹介する。なお、本稿で作るストリームフィルタの完成形はGitHubで公開する。 5C問題とは よく見かける次のような実装は5C問題のため、データによっては読めないものが出てくる危険性がある: $fp = fopen('sjis.csv', 'r'); while ($row = fgetcsv($fp) !== false) { // fgetcsvで読み取った後に、文字コードを変換している mb_convert_variables('UTF
第39回関西PHP勉強会 のスライドです。 (おことわり) スライド上では全て文字エンコーディングのことを「文字コード」と表記していますので、ご了承ください。 やりたいこと 郵便局が提供している郵便番号一覧データをDBに入れる 文字コードが「SJIS」 文字コードの変換が必要 データ件数が約12万件と大きい ファイル操作に工夫が必要 1つめの困りごと:文字コードが「SJIS」 【SJIS(Shift_JIS)】 日本語を含む文字列を表現するために用いられる文字コードの一つ SJISとSJIS-winがあり、SJIS-winの方が対応文字数が多い(①②、はしご高など) ガラケーなどの用いられている 扱いにくい... [参考] PHPの文字コードではSJISじゃなくてSJIS-win、EUC-JPじゃなくてeucJP-winを 【UTF-8】 表示範囲が広く、どの国の文字も文字化けしない 世界
file_get_contents() はファイルパスを指定してデータを取得するだけではなく URLを指定すればそのURLの情報を手軽にとれる関数ですが 対API等に使うと色々とハマるポイントが多いので、それを簡単に解説したものです。 ※このページ向け に書いていたものですが、コード量が多いので分割しました。 問題点 file_get_contents() は ヘッダ情報の保持ルールやタイムアウト処理に癖があるため 返却されるステータスコードや、タイムアウト時に再リクエストなどを行うような 対APIの処理では、それらを知らないと想定していない事態に陥る。 コード例と解説 以下の要件でfunctionを書くとします。 jsonが返ってくるAPIにアクセスして、jsonをarray化する。 タイムアウトは3秒とし、そうなった場合は空の配列が返ってくる。 ステータスコードが200以外で返ってきた
正常系は上手く動くし問題ない!と思ってもケースによっては危なかったり あんまりよくない書き方ってあると思います。 そういうような控えたほうががいいような書き方をケース別にまとめたものです。 まばらには書かれているんですが、一つの場所にはまとまってないのでメモがてら。 ==での比較 違う言語から戻ってくると間違って書いてしまいがちな判定。 問題点 == の場合は 型の相互変換をかけてから比較するので 意図しない比較が行われる可能性がある PHP: 型の相互変換 - Manual コード例と解説 以下のようなコードがあるとします。
結果は順にtrue、true、falseです。 これがPHP7までの非厳密な比較(等価)演算子だったわけですが、まあおかしいよねってことで、この挙動がPHP8.0で変更になることになりました。 よもや今さら基本中の基本である比較演算子の動作を弄ってくるとは思わなかったぞ。 以下はSaner string to number comparisonsの日本語訳です。 PHP RFC: Saner string to number comparisons Introduction ==やその他の非厳密な比較演算子を用いた文字列と数値の比較は、現在は、文字列を数値にキャストし、その後整数か浮動小数の比較を行っています。 この結果、多数の不可解な結果が得られますが、中でも注目すべきは0 == "foobar"がtrueになることです。 このRFCでは、文字列が実際に数値型文字列である場合にのみ数値型
テキストファイルに書かれた数値を読み込んで1プラスして再書き込み。 カウンタとか、なにかのユニークな数値を管理するためによくやる手法かと思います。 で、同時アクセスされたときに読み書きの間で処理が前後すると同じ値が採番されてしまったりするので、だいたいは下記のような手順で進みますよね。(詳細なソースは省きます) fopen() でファイルオープン ↓ flock() で排他ロック ↓ fread() で読み込み ↓ 加算した値を計算 ↓ rewind() とか fseek() とかでファイルポインタを先頭に移動 ↓ fwrite() とかで書き込み ↓ flock() でロック解除 ↓ fclose() でファイルを閉じる ありふれた処理ではあるのですが、そういった処理はたいていDB処理することが最近多かったので、はて fopen() では読み書き両方したいときにはどんな感じで読み込めばよ
PHPをある程度使ってる人なら常識中の常識だと思うんですが・・・ 文字数カウントには絶対に strlen 関数は使っちゃダメです。 でも僕自身、PHP初心者の頃は strlen を使ってしまってたことがあります。 そこで過去の恥ずかしい教訓も込めて、 PHPで strlen 関数を使うのが絶対NGな理由と正しいやり方を解説! なんで文字数カウントには strlen を使っちゃダメなの? PHPに限らず他言語にも strlen っていう関数はあります。 この strlen っていう名前が本当に紛らわしい・・・ 何も予備知識が無いと、 「str、len、、、そうか、文字列(str)の長さ(len)を測る関数か!」 みたいに思っても全くおかしくありません。 でもこの strlen 関数、公式リファレンスを見ると次のように説明されてます。 strlen ( string $string )
はじめに プログラムで数値を保存したり操作したりする際には、 ロケールに依存しないバイナリ表現を使用します。 数値を表示するときに、ロケールにあわせた文字列形式に変換します。 たとえば 12345.67 という数値の表記はアメリカでは "12,345.67"、 フランスでは "12 345,67"、そしてドイツでは "12.345,67" となります。 NumberFormatter クラスのメソッドを実行すると、 数値や通貨、パーセンテージなどの値をロケールに応じた形式にフォーマットすることができます。 NumberFormatter はロケールを考慮した処理を行うので、 ロケールごとに別の NumberFormatter を用意する必要があります。 NumberFormatter のメソッドは、浮動小数点数値のような数値を ロケールにあわせた文字列に変換します。 通貨の場合は、通貨用の
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く