検索

QR コードを生成するにはいくつかの方法がありますが、最も早い方法は Google の API を使用することです。 Google がブロックされていて、うまく機能しないことが多いのは残念です。次に、より便利な方法について話しましょう。

詳細なドキュメントとコードについては、http://phpqrcode.sourceforge.net/ にアクセスしてください。

以下は記載情報を元にQRコードを自動生成する簡易版です。そして指定したディレクトリに保存します。

メインプログラムコード

		<?php include "./phpqrcode/qrcode.php";   //导入主文件 
	    $PNG_TEMP_DIR = dirname(__FILE__).DIRECTORY_SEPARATOR.&#39;qrcode&#39;.DIRECTORY_SEPARATOR;//文件保存目录
    	$PNG_WEB_DIR = &#39;qrcode/&#39;;//用于预览
    	if (!file_exists($PNG_TEMP_DIR))
        	mkdir($PNG_TEMP_DIR);
        $data = "test";//二维码写入内容
        
        $errorCorrectionLevel = &#39;L&#39;;//错误处理级别
        
        $matrixPointSize = 6;//二维码尺寸大小
        //md5加密生成文件名,data可以使用数据库id或者其他唯一标识符
        $filename = $PNG_TEMP_DIR.md5($data.&#39;|&#39;.$errorCorrectionLevel.&#39;|&#39;.$matrixPointSize).&#39;.png&#39;;
        //使用QRcode类生成二维码,文件保存在PNG_TEMP_DIR下
        QRcode::png($data, $filename, $errorCorrectionLevel, $matrixPointSize, 2); 
        //图片预览
         echo &#39;<img  src="/static/imghwm/default1.png"  data-src="&#39;.$PNG_WEB_DIR.basename($filename).&#39;"  class="lazy" / alt="php QRコード生成" ><hr>';  
        ?>

は添付ファイルを追加できないため、以下のコードを貼り付ける必要があります。 。 。次の長いコードを新しいファイルにコピーし、qrcode.php という名前を付けます。上記のコードを実行して QR コードを生成します。 。 。 。

生成された 2 つの QR コードを投稿します


php クラス ファイル (http://phpqrcode.sourceforge.net/ より)

<?php /*
 * PHP QRコードエンコーダー
 *
 * このファイルには、PHP QR コード ライブラリの MERGED バージョンが含まれています。
 *便宜上、完全版から自動生成されました。
 *
 * このマージされたバージョンは外部ファイルを必要としないように構成されています。
 * キャッシュを無効にし、エラーログを作成し、マスクマッチングは遅くなりますが、より高速になります。
 ※チューンナップが必要な場合は、マージされていないバージョンをご利用ください。
 *
 * 完全版、ドキュメント、使用例については、以下をご覧ください。
 *
 * http://phpqrcode.sourceforge.net/
 * https://sourceforge.net/projects/phpqrcode/
 *
 * PHP QR コードは LGPL 3 に基づいて配布されています
 * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
 *
 * このライブラリはフリーソフトウェアです。再配布したり、
 * GNU Lesser General Public の規約に基づいて変更してください
 * Free Software Foundation によって発行されたライセンス。どちらか
 * ライセンスのバージョン 3 以降のバージョン。
 *
 ※このライブラリは、皆様のお役に立つことを願って配布しておりますが、
 * ただし、いかなる保証もありません。黙示の保証さえなしに、
 * 商品性または特定の目的への適合性。 GNU を参照
 * 詳細については、劣等一般公衆利用許諾書を参照してください。
 *
 * GNU Lesser General Public のコピーを受け取っているはずです
 * このライブラリと一緒にライセンスを取得します。そうでない場合は、フリーソフトウェアに書き込みます
 * Foundation, Inc.、51 Franklin St、5 階、ボストン、マサチューセッツ州 02110-1301 米国
 */
 
 

/*
 * バージョン: 1.1.4
 * ビルド: 2010100721
 */



//---- qrconst.php -----------------------------





/*
 * PHP QRコードエンコーダ
 *
 ※共通定数
 *
 * LGPL 2.1 で配布される libqrencode C ライブラリに基づく
 ※Copyright (C) 2006, 2007, 2008, 2009 福地 健太郎 <fukuchi>
 *
 * PHP QR コードは LGPL 3 に基づいて配布されています
 * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
 *
 * このライブラリはフリーソフトウェアです。再配布したり、
 * GNU Lesser General Public の規約に基づいて変更してください
 * Free Software Foundation によって発行されたライセンス。どちらか
 * ライセンスのバージョン 3 以降のバージョン。
 *
 ※このライブラリは、皆様のお役に立つことを願って配布しておりますが、
 * ただし、いかなる保証もありません。黙示の保証さえなしに、
 * 商品性または特定の目的への適合性。 GNU を参照
 * 詳細については、劣等一般公衆利用許諾書を参照してください。
 *
 * GNU Lesser General Public のコピーを受け取っているはずです
 * このライブラリと一緒にライセンスを取得します。そうでない場合は、フリーソフトウェアに書き込みます
 * Foundation, Inc.、51 Franklin St、5 階、ボストン、マサチューセッツ州 02110-1301 米国
 */
 
	// エンコードモード
	 
	定義('QR_MODE_NUL', -1);
	定義('QR_MODE_NUM', 0);
	定義('QR_MODE_AN', 1);
	定義('QR_MODE_8', 2);
	定義('QR_MODE_KANJI', 3);
	定義('QR_MODE_STRUCTURE', 4);

	// エラー訂正のレベル。

	定義('QR_ECLEVEL_L', 0);
	定義('QR_ECLEVEL_M', 1);
	定義('QR_ECLEVEL_Q', 2);
	定義('QR_ECLEVEL_H', 3);
	
	// サポートされている出力形式
	
	定義('QR_FORMAT_TEXT', 0);
	定義('QR_FORMAT_PNG', 1);
	
	クラスqrstr {
		パブリック静的関数 set(&$srctab, $x, $y, $repl, $replLen = false) {
			$srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false) ?$replLen:strlen($repl));
		}
	}//----merged_config.php -----------------------------




/*
 * PHP QRコードエンコーダ
 *
 * 構成ファイル、マージされたバージョン用に調整
 */
     
    定義('QR_CACHEABLE', false);       // キャッシュを使用します - ディスク読み取りは増加しますが、CPU パワーは低下し、マスクとフォーマット テンプレートがキャッシュに保存されます
    定義('QR_CACHE_DIR', false);       // QR_CACHEABLE === true の場合に使用されます
    定義('QR_LOG_DIR', false);         // デフォルトのエラーログディレクトリ   
    
    定義('QR_FIND_BEST_MASK', true);                                                          // true の場合、最適なマスクを推定します (仕様はデフォルトですが、非常に遅いです。false に設定するとパフォーマンスは大幅に向上しますが、(おそらく) コードの品質は最悪になります)
    定義('QR_FIND_FROM_RANDOM', 2);                                                       // false の場合は、利用可能なすべてのマスクをチェックします。それ以外の場合、値はチェックする必要があるマスクの数を示し、マスク ID はランダムに取得されます。
    定義('QR_DEFAULT_MASK', 2);                                                               // QR_FIND_BEST_MASK === falseの場合
                                                  
    定義('QR_PNG_MAXIMUM_SIZE', 1024);                                                       // 許可される PNG 画像の最大幅 (ピクセル単位)。GD と PHP がそのような大きな画像を処理できるように調整します。
                                                  



//---- qrtools.php -----------------------------




/*
 * PHP QRコードエンコーダ
 *
 * ツールセット、便利なユーティリティ、およびデバッグ ユーティリティ。
 *
 * PHP QR コードは LGPL 3 に基づいて配布されています
 * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
 *
 * このライブラリはフリーソフトウェアです。再配布したり、
 * GNU Lesser General Public の規約に基づいて変更してください
 * Free Software Foundation によって発行されたライセンス。どちらか
 * ライセンスのバージョン 3 以降のバージョン。
 *
 ※このライブラリは、皆様のお役に立つことを願って配布しておりますが、
 * ただし、いかなる保証もありません。黙示の保証さえなしに、
 * 商品性または特定の目的への適合性。 GNU を参照
 * 詳細については、劣等一般公衆利用許諾書を参照してください。
 *
 * GNU Lesser General Public のコピーを受け取っているはずです
 * このライブラリと一緒にライセンスを取得します。そうでない場合は、フリーソフトウェアに書き込みます
 * Foundation, Inc.、51 Franklin St、5 階、ボストン、マサチューセッツ州 02110-1301 米国
 */

    クラス QRtools {
    
        //------------------------------------------------ ------------------------
        パブリック静的関数 binarize($frame)
        {
            $len = カウント($frame);
            foreach ($frame as &$frameLine) {
                
                for($i=0; $i 1) {
                $eccLevel = $mode[1];
            }
                
            $qrTab = QRcode::text($code, false, $eccLevel);
            $size = カウント($qrTab);
                
            $barcode_array['num_rows'] = $size;
            $barcode_array['num_cols'] = $size;
            $barcode_array['bcode'] = array();
                
            foreach ($qrTab as $line) {
                $arrAdd = 配列();
                foreach(str_split($line) as $char)
                    $arrAdd[] = ($char=='1')?1:0;
                $barcode_array['bcode'][] = $arrAdd;
            }
                    
            $barcode_array を返します。
        }
        
        //------------------------------------------------ ------------------------
        パブリック静的関数clearCache()
        {
            self::$frames = array();
        }
        
        //------------------------------------------------ ------------------------
        パブリック静的関数 buildCache()
        {
			QRtools::markTime('before_build_cache');
			
			$mask = 新しい QRmask();
            for ($a=1; $a makeMaskNo($maskNo, $width, $frame, $bitMask, true);
            }QRtools::markTime('after_build_cache');
        }

        //------------------------------------------------ ------------------------
        パブリック静的関数ログ($outfile, $err)
        {
            if (QR_LOG_DIR !== false) {
                if ($err != '') {
                    if ($outfile !== false) {
                        file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND);
                    } それ以外 {
                        file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND);
                    }
                }    
            }
        }
        
        //------------------------------------------------ ------------------------
        パブリック静的関数 dumpMask($frame) 
        {
            $width = カウント($frame);
            for($y=0;$y
                    <thead>
<tr style="border-bottom:1px ソリッド シルバー"><tdcolspan style="text-align:center">ベンチマーク</tdcolspan></tr>
                    ';

            foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) {
                if ($p > 0) {
                    echo '<tr>
<th style="text-align:right">till '.$markerId.': </th>
<td>'.number_format($thisTime-$lastTime, 6)。 's</td>
</tr>';
                } それ以外 {
                    $startTime = $thisTime;
                }
                
                $p++;
                $lastTime = $thisTime;
            }
            
            echo '</thead>
<tfoot>
                <tr style="border-top:2px ソリッド ブラック">
<th style="text-align:right">合計: </th>
<td>'.number_format($lastTime-$startTime 、6).の</td></tr>;
            </td>
</tr>
</tfoot>
            テーブル>';
        }
        
    }//################################################ ########################
    
    QRtools::markTime('start');
    



//---- qrspec.php -----------------------------




/*
 * PHP QRコードエンコーダ
 *
 ※QRコード仕様
 *
 * LGPL 2.1 で配布される libqrencode C ライブラリに基づく
 ※Copyright (C) 2006, 2007, 2008, 2009 福地 健太郎 <fukuchi>
 *
 * PHP QR コードは LGPL 3 に基づいて配布されています
 * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
 *
 * 以下のデータ/仕様は、
 ※「二次元シンボル QRコード 基本仕様書」(JIS X0510:2004)
 *  または
 * 「自動識別およびデータ収集技術 -- 
 * QR Code 2005 バーコード シンボル仕様」 (ISO/IEC 18004:2006)
 *
 * このライブラリはフリーソフトウェアです。再配布したり、
 * GNU Lesser General Public の規約に基づいて変更してください
 * Free Software Foundation によって発行されたライセンス。どちらか
 * ライセンスのバージョン 3 以降のバージョン。
 *
 ※このライブラリは、皆様のお役に立つことを願って配布しておりますが、
 * ただし、いかなる保証もありません。黙示の保証さえなしに、
 * 商品性または特定の目的への適合性。 GNU を参照
 * 詳細については、劣等一般公衆利用許諾書を参照してください。
 *
 * GNU Lesser General Public のコピーを受け取っているはずです
 * このライブラリと一緒にライセンスを取得します。そうでない場合は、フリーソフトウェアに書き込みます
 * Foundation, Inc.、51 Franklin St、5 階、ボストン、マサチューセッツ州 02110-1301 米国
 */
 
    定義('QRSPEC_VERSION_MAX', 40);
    定義('QRSPEC_WIDTH_MAX', 177);

    定義('QRCAP_WIDTH', 0);
    定義('QRCAP_WORDS', 1);
    定義('QRCAP_REMINDER', 2);
    定義('QRCAP_EC', 3);

    クラス QRspec {
    
        パブリック静的 $capacity = array(
            配列( 0, 0, 0, 配列( 0, 0, 0, 0)),
            array( 21, 26, 0, array( 7, 10, 13, 17)), // 1
            配列( 25, 44, 7, 配列( 10, 16, 22, 28)),
            配列( 29, 70, 7, 配列( 15, 26, 36, 44)),
            配列( 33, 100, 7, 配列( 20, 36, 52, 64))、
            array( 37, 134, 7, array( 26, 48, 72, 88)), // 5
            配列( 41, 172, 7, 配列( 36, 64, 96, 112)),
            配列( 45, 196, 0, 配列( 40, 72, 108, 130)),
            配列( 49, 242, 0, 配列( 48, 88, 132, 156)),
            配列( 53, 292, 0, 配列( 60, 110, 160, 192)),
            array( 57, 346, 0, array( 72, 130, 192, 224)), //10
            配列( 61, 404, 0, 配列( 80, 150, 224, 264)),
            配列( 65, 466, 0, 配列( 96, 176, 260, 308)),
            配列( 69, 532, 0, 配列( 104, 198, 288, 352)),
            配列( 73, 581, 3, 配列( 120, 216, 320, 384)),
            array( 77, 655, 3, array( 132, 240, 360, 432)), //15
            配列( 81, 733, 3, 配列( 144, 280, 408, 480)),
            配列( 85, 815, 3, 配列( 168, 308, 448, 532)),
            配列( 89, 901, 3, 配列( 180, 338, 504, 588)),
            配列( 93, 991, 3, 配列( 196, 364, 546, 650)),
            array( 97, 1085, 3, array( 224, 416, 600, 700)), //20
            配列(101, 1156, 4, 配列(224, 442, 644, 750)),
            配列(105, 1258, 4, 配列(252, 476, 690, 816)),
            配列(109, 1364, 4, 配列(270, 504, 750, 900)),
            配列(113, 1474, 4, 配列(300, 560, 810, 960)),
            array(117, 1588, 4, array( 312, 588, 870, 1050)), //25
            配列(121, 1706, 4, 配列(336, 644, 952, 1110)),
            配列(125, 1828, 4, 配列(360, 700, 1020, 1200)),
            配列(129, 1921, 3, 配列(390, 728, 1050, 1260)),
            配列(133, 2051, 3, 配列(420, 784, 1140, 1350)),
            array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30
            配列(141, 2323, 3, 配列(480, 868, 1290, 1530)),
            配列(145, 2465, 3, 配列(510, 924, 1350, 1620)),
            配列(149, 2611, 3, 配列(540, 980, 1440, 1710)),
            配列(153, 2761, 3, 配列(570, 1036, 1530, 1800)),
            array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35
            配列(161, 3034, 0, 配列(600, 1120, 1680, 1980)),
            配列(165, 3196, 0, 配列(630, 1204, 1770, 2100)),
            配列(169, 3362, 0, 配列(660, 1260, 1860, 2220)),
            配列(173, 3532, 0, 配列(720, 1316, 1950, 2310)),
            array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40
        );
        
        //------------------------------------------------ ------------------------
        パブリック静的関数 getDataLength($version, $level)
        {
            return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level];
        }//------------------------------------------------ ------------------------
        パブリック静的関数 getECCLength($version, $level)
        {
            return self::$capacity[$version][QRCAP_EC][$level];
        }
        
        //------------------------------------------------ ------------------------
        パブリック静的関数 getWidth($version)
        {
            self::$capacity[$version][QRCAP_WIDTH] を返します。
        }
        
        //------------------------------------------------ ------------------------
        パブリック静的関数 getRemainder($version)
        {
            return self::$capacity[$version][QRCAP_REMINDER];
        }
        
        //------------------------------------------------ ------------------------
        パブリック静的関数 getMinimumVersion($size, $level)
        {

            for($i=1; $i= $size) 
                    $i を返します。
            }

            -1 を返します。
        }
    
        //################################################ ######################
        
        public static $lengthTableBits = array(
            配列(10, 12, 14)、
            配列(9、11、13)、
            配列(8, 16, 16)、
            配列(8、10、12)
        );
        
        //------------------------------------------------ ------------------------
        パブリック静的関数 lengthIndicator($mode, $version)
        {
            if ($mode == QR_MODE_STRUCTURE)
                0を返します。
                
            if ($version  QRSPEC_VERSION_MAX)
                0を返します。

            return self::$versionPattern[$version -7];
        }// フォーマット情報 ---------------------------------------------- ----
        // testing/test_qrspec.c の calcFormatInfo を参照してください (オリジナルの qrencode C lib)
        
        public static $formatInfo = array(
            配列(0x77c4、0x72f3、0x7daa、0x789d、0x662f、0x6318、0x6c41、0x6976)、
            配列(0x5412、0x5125、0x5e7c、0x5b4b、0x45f9、0x40ce、0x4f97、0x4aa0)、
            配列(0x355f、0x3068、0x3f31、0x3a06、0x24b4、0x2183、0x2eda、0x2bed)、
            配列(0x1689、0x13be、0x1ce7、0x19d0、0x0762、0x0255、0x0d0c、0x083b)
        );

        パブリック静的関数 getFormatInfo($mask, $level)
        {
            if($mask  7)
                0を返します。
                
            if($level  3)
                0を返します。                

            return self::$formatInfo[$level][$mask];
        }

        // フレーム  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - - ----------------
        // 初期フレームのキャッシュ。
         
        パブリック静的 $frames = array();

        /**-------------------------------------------------- ------------------
         ※ファインダーパターンを入れます。
         * @paramフレーム
         * @パラメータ幅
         * @param ox,oy パターンの左上座標*/
        パブリック静的関数 putFinderPattern(&$frame, $ox, $oy)
        {
            $finder = 配列(
                "xc1xc1xc1xc1xc1xc1xc1",
                "xc1xc0xc0xc0xc0xc0xc1",
                "xc1xc0xc1xc1xc1xc0xc1",
                "xc1xc0xc1xc1xc1xc0xc1",
                "xc1xc0xc1xc1xc1xc0xc1",
                "xc1xc0xc0xc0xc0xc0xc1",
                「xc1xc1xc1xc1xc1xc1xc1」
            );                            
            
            for($y=0; $y= 7) {
                $vinf = self::getVersionPattern($version);

                $v = $vinf;
                
                for($x=0; $x>> 1;
                    }
                }

                $v = $vinf;
                for($y=0; $y>> 1;
                    }
                }
            }
    
            // そして少し...  
            $frame[$width - 8][8] = "x81";
            
            $frame を返します。
        }//------------------------------------------------ ------------------------
        パブリック静的関数デバッグ($frame, $binary_mode = false)
        {
            if ($binary_mode) {
            
                    foreach ($frame as &$frameLine) {
                        $frameLine = join('<span class="m"> </span>',explode('0', $frameLine));
                        $frameLine = join('██',explode('1', $frameLine));
                    }
                    
                    ?>
                
                    .m { 背景色: 白; }
                スタイル>
                <?php echo '<pre class="brush:php;toolbar:false"><tt><br><br><br>        ';
                    echo join("<br> ", $frame);
                    echo '</tt></deltalab></fukuchi></deltalab></deltalab></fukuchi>






'; } それ以外 { foreach ($frame as &$frameLine) { $frameLine = join('',explode("xc0", $frameLine)); $frameLine = join('?',explode("xc1", $frameLine)); $frameLine = join(' ',explode("xa0", $frameLine)); $frameLine = join('?',explode("xa1", $frameLine)); $frameLine = join('',explode("x84", $frameLine)); //フォーマット0 $frameLine = join('',explode("x85", $frameLine)); //フォーマット1 $frameLine = join('?',explode("x81", $frameLine)); //特殊ビット $frameLine = join('',explode("x90", $frameLine)); //クロック0 $frameLine = join('?',explode("x91", $frameLine)); //クロック1 $frameLine = join('',explode("x88", $frameLine)); //バージョン $frameLine = join('?',explode("x89", $frameLine)); //バージョン $frameLine = join('?',explode("x01", $frameLine)); $frameLine = join('?',explode(" ", $frameLine)); } ?> .p { 背景色: 黄色; } .m { 背景色: #00FF00; } .s { 背景色: #FF0000; } .c { 背景色: アクア; } .x { 背景色: ピンク; } .f { 背景色: ゴールド; } スタイル> "; echo join("
", $frame); echo "
"; } } //------------------------------------------------ ------------------------ パブリック静的関数シリアル($frame) { return gzcompress(join("n", $frame), 9); } //------------------------------------------------ ------------------------ パブリック静的関数 unserial($code) { returnexplode("n", gzuncompress($code)); }//------------------------------------------------ ------------------------ パブリック静的関数 newFrame($version) { if($version QRSPEC_VERSION_MAX) null を返します。 if(!isset(self::$frames[$version])) { $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; if (QR_CACHEABLE) { if (file_exists($fileName)) { self::$frames[$version] = self::unserial(file_get_contents($fileName)); } それ以外 { self::$frames[$version] = self::createFrame($version); file_put_contents($fileName, self::serial(self::$frames[$version])); } } それ以外 { self::$frames[$version] = self::createFrame($version); } } if(is_null(self::$frames[$version])) null を返します。 self::$frames[$version] を返します。 } //------------------------------------------------ ------------------------ public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } パブリック静的関数 rsBlockNum1($spec) { return $spec[0]; } public static function rsDataCodes1($spec) { return $spec[1]; } パブリック静的関数 rsEccCodes1($spec) { return $spec[2]; } パブリック静的関数 rsBlockNum2($spec) { return $spec[3]; } public static function rsDataCodes2($spec) { return $spec[4]; } public static function rsEccCodes2($spec) { return $spec[2]; } public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } } //---- qrimage.php ----------------------------- /* * PHP QRコードエンコーダ * ※GD2を使用したコードの画像出力 * * PHP QR コードは LGPL 3 に基づいて配布されています * Copyright (C) 2010 Dominik Dzienia * * このライブラリはフリーソフトウェアです。再配布したり、 * GNU Lesser General Public の規約に基づいて変更してください * Free Software Foundation によって発行されたライセンス。どちらか * ライセンスのバージョン 3 以降のバージョン。 * ※このライブラリは、皆様のお役に立つことを願って配布しておりますが、 * ただし、いかなる保証もありません。黙示の保証さえなしに、 * 商品性または特定の目的への適合性。 GNU を参照 * 詳細については、劣等一般公衆利用許諾書を参照してください。 * * GNU Lesser General Public のコピーを受け取っているはずです * このライブラリと一緒にライセンスを取得します。そうでない場合は、フリーソフトウェアに書き込みます * Foundation, Inc.、51 Franklin St、5 階、ボストン、マサチューセッツ州 02110-1301 米国 */ 定義('QR_IMAGE', true); クラス QRimage { //------------------------------------------------ ------------------------ パブリック静的関数 png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) { $image = self::image($frame, $pixelPerPoint, $outerFrame); if ($filename === false) { Header("コンテンツタイプ: image/png"); ImagePng($image); } それ以外 { if($saveandprint===TRUE){ ImagePng($image, $filename); header("コンテンツタイプ: image/png"); ImagePng($image); }それ以外{ ImagePng($image, $filename); } } ImageDestroy($image); } //------------------------------------------------ ------------------------ パブリック静的関数 jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) { $image = self::image($frame, $pixelPerPoint, $outerFrame); if ($filename === false) { Header("コンテンツタイプ: image/jpeg"); ImageJpeg($image, null, $q); } それ以外 { ImageJpeg($image, $filename, $q); } ImageDestroy($image); }//------------------------------------------------ ------------------------ プライベート静的関数 image($frame, $pixelPerPoint = 4, $outerFrame = 4) { $h = カウント($frame); $w = strlen($frame[0]); $imgW = $w + 2*$outerFrame; $imgH = $h + 2*$outerFrame; $base_image =ImageCreate($imgW, $imgH); $col[0] = ImageColorAllocate($base_image,255,255,255); $col[1] = ImageColorAllocate($base_image,0,0,0); imagefill($base_image, 0, 0, $col[0]); for($y=0; $y * * PHP QR コードは LGPL 3 に基づいて配布されています * Copyright (C) 2010 Dominik Dzienia * * このライブラリはフリーソフトウェアです。再配布したり、 * GNU Lesser General Public の規約に基づいて変更してください * Free Software Foundation によって発行されたライセンス。どちらか * ライセンスのバージョン 3 以降のバージョン。 * ※このライブラリは、皆様のお役に立つことを願って配布しておりますが、 * ただし、いかなる保証もありません。黙示の保証さえなしに、 * 商品性または特定の目的への適合性。 GNU を参照 * 詳細については、劣等一般公衆利用許諾書を参照してください。 * * GNU Lesser General Public のコピーを受け取っているはずです * このライブラリと一緒にライセンスを取得します。そうでない場合は、フリーソフトウェアに書き込みます * Foundation, Inc.、51 Franklin St、5 階、ボストン、マサチューセッツ州 02110-1301 米国 */ 定義('STRUCTURE_HEADER_BITS', 20); 定義('MAX_STRUCTURED_SYMBOLS', 16); クラス QRinputItem { パブリック$モード; パブリック $size; パブリック $data; パブリック $bstream; パブリック関数 __construct($mode, $size, $data, $bstream = null) { $setData = array_slice($data, 0, $size); if (count($setData) mode = $mode; $this->size = $size; $this->data = $setData; $this->bstream = $bstream; } //------------------------------------------------ ------------------------ パブリック関数 encodeModeNum($version) { 試す { $words = (int)($this->size / 3); $bs = 新しい QRbitstream(); $val = 0x1; $bs->appendNum(4, $val); $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); for($i=0; $idata[$i*3 ]) - ord('0')) * 100; $val += (ord($this->data[$i*3+1]) - ord('0')) * 10; $val += (ord($this->data[$i*3+2]) - ord('0')); $bs->appendNum(10, $val); } if($this->size - $words * 3 == 1) { $val = ord($this->data[$words*3]) - ord('0'); $bs->appendNum(4, $val); } else if($this->size - $words * 3 == 2) { $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; $val += (ord($this->data[$words*3+1]) - ord('0')); $bs->appendNum(7, $val); } $this->bstream = $bs; 0を返します。 } catch (例外 $e) { -1 を返します。 } }//------------------------------------------------ ------------------------ パブリック関数 encodeModeAn($version) { 試す { $words = (int)($this->size / 2); $bs = 新しい QRbitstream(); $bs->appendNum(4, 0x02); $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); for($i=0; $idata[$i*2 ])) * 45; $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1])); $bs->appendNum(11, $val); } if($this->size & 1) { $val = QRinput::lookAnTable(ord($this->data[$words * 2])); $bs->appendNum(6, $val); } $this->bstream = $bs; 0を返します。 } catch (例外 $e) { -1 を返します。 } } //------------------------------------------------ ------------------------ パブリック関数 encodeMode8($version) { 試す { $bs = 新しい QRbitstream(); $bs->appendNum(4, 0x4); $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); for($i=0; $isize; $i++) { $bs->appendNum(8, ord($this->data[$i])); } $this->bstream = $bs; 0を返します。 } catch (例外 $e) { -1 を返します。 } } //------------------------------------------------ ------------------------ パブリック関数 encodeModeKanji($version) { 試す { $bs = 新しい QRbitrtream(); $bs->appendNum(4, 0x8); $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); for($i=0; $isize; $i+=2) { $val = (ord($this->data[$i]) data[$i+1]); if($val > 8) * 0xc0; $val = ($val & 0xff) + $h; $bs->appendNum(13, $val); } $this->bstream = $bs; 0を返します。 } catch (例外 $e) { -1 を返します。 } } //------------------------------------------------ ------------------------ パブリック関数 encodeModeStructure() { 試す { $bs = 新しい QRbitstream(); $bs->appendNum(4, 0x03); $bs->appendNum(4, ord($this->data[1]) - 1); $bs->appendNum(4, ord($this->data[0]) - 1); $bs->appendNum(8, ord($this->data[2])); $this->bstream = $bs; 0を返します。 } catch (例外 $e) { -1 を返します。 } } //------------------------------------------------ ------------------------ パブリック関数estimateBitStreamSizeOfEntry($version) { $ビット = 0; if($version == 0) $バージョン = 1; switch($this->mode) { case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); 壊す; QR_MODE_AN の場合: $bits = QRinput::estimateBitsModeAn($this->size); 壊す; QR_MODE_8 の場合: $bits = QRinput::estimateBitsMode8($this->size); 壊す; case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; QR_MODE_STRUCTURE の場合: STRUCTURE_HEADER_BITS を返します。 デフォルト: 0を返します。 } $l = QRspec::lengthIndicator($this->mode, $version); $m = 1 size + $m - 1) / $m); $bits += $num * (4 + $l); $bits を返します。 }//------------------------------------------------ ------------------------ パブリック関数 encodeBitStream($version) { 試す { unset($this->bstream); $words = QRspec::maximumWords($this->mode, $version); if($this->size > $words) { $st1 = 新しい QRinputItem($this->mode, $words, $this->data); $st2 = 新しい QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); $st1->encodeBitStream($version); $st2->encodeBitStream($version); $this->bstream = 新しい QRbitstream(); $this->bstream->append($st1->bstream); $this->bstream->append($st2->bstream); 設定を解除($st1); 設定を解除($st2); } それ以外 { $ret = 0; switch($this->mode) { QR_MODE_NUM の場合: $ret = $this->encodeModeNum($version); 壊す; QR_MODE_AN の場合: $ret = $this->encodeModeAn($version); 壊す; QR_MODE_8 の場合: $ret = $this->encodeMode8($version); 壊す; case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; QR_MODE_STRUCTURE の場合: $ret = $this->encodeModeStructure(); 壊す; デフォルト: 壊す; } if($ret bstream->size(); を返す } catch (例外 $e) { -1 を返します。 } } }; //################################################ ######################## クラス QRinput { パブリック $items; プライベート $バージョン; プライベート $レベル; //------------------------------------------------ ------------------------ パブリック関数 __construct($version = 0, $level = QR_ECLEVEL_L) { if ($version QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { throw new Exception('無効なバージョン番号'); NULL を返します。 } $this->version = $version; $this->level = $level; } //------------------------------------------------ ------------------------ パブリック関数 getVersion() { $this->バージョンを返します; } //------------------------------------------------ ------------------------ パブリック関数 setVersion($version) { if($version QRSPEC_VERSION_MAX) { throw new Exception('無効なバージョン番号'); -1 を返します。 } $this->version = $version; 0を返します。 } //------------------------------------------------ ------------------------ パブリック関数 getErrorCorrectionLevel() { $this->レベルを返します; } //------------------------------------------------ ------------------------ パブリック関数 setErrorCorrectionLevel($level) { if($level > QR_ECLEVEL_H) { throw new Exception('無効な ECLEVEL'); -1 を返します。 } $this->level = $level; 0を返します。 } //------------------------------------------------ ------------------------ パブリック関数 appendEntry(QRinputItem $entry) { $this->items[] = $entry; } //------------------------------------------------ ------------------------ パブリック関数 append($mode, $size, $data) { 試す { $entry = 新しい QRinputItem($mode, $size, $data); $this->items[] = $entry; 0を返します。 } catch (例外 $e) { -1 を返します。 } } //------------------------------------------------ ------------------------ public function insertStructuredAppendHeader($size, $index, $parity) { if( $size > MAX_STRUCTURED_SYMBOLS ) { throw new Exception('insertStructuredAppendHeader のサイズが間違っています'); }if( $index MAX_STRUCTURED_SYMBOLS ) { throw new Exception('insertStructuredAppendHeader のインデックスが間違っています'); } $buf = 配列($size, $index, $parity); 試す { $entry = 新しい QRinputItem(QR_MODE_STRUCTURE, 3, buf); array_unshift($this->items, $entry); 0を返します。 } catch (例外 $e) { -1 を返します。 } } //------------------------------------------------ ------------------------ パブリック関数 calcParity() { $パリティ = 0; foreach($this->items as $item) { if($item->mode != QR_MODE_STRUCTURE) { for($i=$item->size-1; $i>=0; $i--) { $parity ^= $item->data[$i]; } } } $パリティを返します。 } //------------------------------------------------ ------------------------ パブリック静的関数 checkModeNum($size, $data) { for($i=0; $i ord('9'))){ false を返します。 } } true を返します。 } //------------------------------------------------ ------------------------ パブリック静的関数estimateBitsModeNum($size) { $w = (int)$size / 3; $bits = $w * 10; スイッチ($size - $w * 3) { ケース1: $ビット += 4; 壊す; ケース 2: $ビット += 7; 壊す; デフォルト: 壊す; } $bits を返します。 } //------------------------------------------------ ------------------------ パブリック静的 $anTable = array( -1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、 -1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、 36、-1、-1、-1、37、38、-1、-1、-1、-1、39、40、-1、41、42、43、 0、1、2、3、4、5、6、7、8、9、44、-1、-1、-1、-1、-1、 -1、10、11、12、13、14、15、16、17、18、19、20、21、22、23、24、 25、26、27、28、29、30、31、32、33、34、35、-1、-1、-1、-1、-1、 -1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、 -1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1、-1 ); //------------------------------------------------ ------------------------ パブリック静的関数 lookAnTable($c) { return (($c > 127)?-1:self::$anTable[$c]); } //------------------------------------------------ ------------------------ パブリック静的関数 checkModeAn($size, $data) { for($i=0; $i 0x9ffc && $val 0xebbf) { false を返します。 } } true を返します。 }/*************************************************** ******************* * 検証 ************************************************* ********************/ パブリック静的関数チェック($mode, $size, $data) { if($size items as $item) { $bits += $item->estimateBitStreamSizeOfEntry($version); } $bits を返します。 } //------------------------------------------------ ------------------------ パブリック関数estimateVersion() { $バージョン = 0; $prev = 0; する { $prev = $version; $bits = $this->estimateBitStreamSize($prev); $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); if ($version $prev); $version を返します。 } //------------------------------------------------ ------------------------ パブリック静的関数 lengthOfCode($mode, $version, $bits) { $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); スイッチ($mode) { ケース QR_MODE_NUM: $chunks = (int)($payload / 10); $remain = $payload - $chunks * 10; $size = $chunks * 3; if($remain >= 7) { $size += 2; } else if($remain >= 4) { $size += 1; } 壊す; QR_MODE_AN の場合: $chunks = (int)($payload / 11); $remain = $payload - $chunks * 11; $size = $chunks * 2; if($remain >= 6) $サイズ++; 壊す; QR_MODE_8の場合: $size = (int)($payload / 8); 壊す; QR_MODE_KANJIの場合: $size = (int)(($payload / 13) * 2); 壊す; QR_MODE_STRUCTURE の場合: $size = (int)($payload / 8); 壊す; デフォルト: $サイズ = 0; 壊す; } $maxsize = QRspec::maximumWords($mode, $version); if($size $maxsize) $size = $maxsize; $size を返します。 } //------------------------------------------------ ------------------------ パブリック関数 createBitStream() { $to
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?Apr 17, 2025 am 12:24 AM

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHP対Python:ユースケースとアプリケーションPHP対Python:ユースケースとアプリケーションApr 17, 2025 am 12:23 AM

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

さまざまなHTTPキャッシングヘッダー(例:キャッシュコントロール、ETAG、ラスト変更)を説明してください。さまざまなHTTPキャッシングヘッダー(例:キャッシュコントロール、ETAG、ラスト変更)を説明してください。Apr 17, 2025 am 12:22 AM

HTTPキャッシュヘッダーの主要なプレーヤーには、キャッシュコントロール、ETAG、およびラスト修飾が含まれます。 1.Cache-Controlは、キャッシュポリシーを制御するために使用されます。例:キャッシュコントロール:Max-Age = 3600、public。 2。ETAGは、一意の識別子を介してリソースの変更を検証します。例:ETAG: "686897696A7C876B7E"。 3. Last-Modifiedは、リソースの最後の変更時間を示しています。

PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか?PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか?Apr 17, 2025 am 12:06 AM

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHP:サーバー側のスクリプト言語の紹介PHP:サーバー側のスクリプト言語の紹介Apr 16, 2025 am 12:18 AM

PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

PHPとWeb:その長期的な影響を調査しますPHPとWeb:その長期的な影響を調査しますApr 16, 2025 am 12:17 AM

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

なぜPHPを使用するのですか?利点と利点が説明されましたなぜPHPを使用するのですか?利点と利点が説明されましたApr 16, 2025 am 12:16 AM

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター