[{"data":1,"prerenderedAt":435},["ShallowReactive",2],{"post-\u002Fposts\u002Funiversity-php-notes":3,"post-nav-\u002Fposts\u002Funiversity-php-notes":426},{"id":4,"title":5,"body":6,"date":412,"description":413,"draft":414,"extension":415,"meta":416,"navigation":417,"path":418,"seo":419,"stem":420,"summary":421,"tags":422,"__hash__":425},"posts\u002Fposts\u002Funiversity-php-notes.md","大学里学 PHP 记的那几页",{"type":7,"value":8,"toc":403},"minimark",[9,25,30,47,76,81,102,124,127,143,147,261,264,272,275,287,312,339,342,399],[10,11,12],"blockquote",{},[13,14,15,16,20,21,24],"p",{},"这篇是 2021 年 11 月记的。当时散在好几条笔记里，这里并成了一篇，原文照抄，拼错的库名（",[17,18,19],"code",{},"guzzie","、",[17,22,23],{},"amsey UUID","）也留着。",[26,27,29],"h2",{"id":28},"装环境先从扩展开始","装环境，先从扩展开始",[31,32,33,37,40],"ul",{},[34,35,36],"li",{},"装不上很大一部分原因是 php 扩展没启动，mbstring、dom 都要启动。",[34,38,39],{},"指令没响应是没有加 path。",[34,41,42,43,46],{},"php-pdo、php-mysql 这些都要手动装，用 ",[17,44,45],{},"phpenmod"," 来启用：",[48,49,54],"pre",{"className":50,"code":51,"language":52,"meta":53,"style":53},"language-bash shiki shiki-themes github-light github-dark","phpenmod gd\nphpenmod pdo_mysql\n","bash","",[17,55,56,68],{"__ignoreMap":53},[57,58,61,64],"span",{"class":59,"line":60},"line",1,[57,62,45],{"class":63},"sScJk",[57,65,67],{"class":66},"sZZnC"," gd\n",[57,69,71,73],{"class":59,"line":70},2,[57,72,45],{"class":63},[57,74,75],{"class":66}," pdo_mysql\n",[31,77,78],{},[34,79,80],{},"全局指令的 path：",[48,82,84],{"className":50,"code":83,"language":52,"meta":53,"style":53},"export PATH=$PATH:$HOME\u002F.config\u002F.composer\u002Fvendor\u002Fbin\n",[17,85,86],{"__ignoreMap":53},[57,87,88,92,96,99],{"class":59,"line":60},[57,89,91],{"class":90},"szBVR","export",[57,93,95],{"class":94},"sVt8B"," PATH",[57,97,98],{"class":90},"=",[57,100,101],{"class":94},"$PATH:$HOME\u002F.config\u002F.composer\u002Fvendor\u002Fbin\n",[31,103,104,107,117],{},[34,105,106],{},"我也不知道是第几次学了。算了算了再学一遍。",[34,108,109,112,113,116],{},[17,110,111],{},"\"\""," 能插值，",[17,114,115],{},"''"," 不能插。",[34,118,119,120,123],{},"comment 用 ",[17,121,122],{},"\u002F\u002F"," 就好了。别的也支持但是就用这个。",[26,125,126],{"id":126},"composer",[31,128,129,132],{},[34,130,131],{},"getcomposer repository 里头找安装文件。才五百多个星，一个包管理器就这点，这是否",[34,133,134,20,137,20,140],{},[17,135,136],{},"composer require",[17,138,139],{},"composer update",[17,141,142],{},"composer global require",[26,144,146],{"id":145},"从-js-找-php-的对应库","从 JS 找 PHP 的对应库",[148,149,150,163],"table",{},[151,152,153],"thead",{},[154,155,156,160],"tr",{},[157,158,159],"th",{},"在 JS 里用惯的",[157,161,162],{},"PHP 这边的对应",[164,165,166,175,182,190,198,206,213,221,229,237,245,253],"tbody",{},[154,167,168,172],{},[169,170,171],"td",{},"lodash",[169,173,174],{},"radash",[154,176,177,180],{},[169,178,179],{},"axios",[169,181,19],{},[154,183,184,187],{},[169,185,186],{},"dayjs",[169,188,189],{},"carbon",[154,191,192,195],{},[169,193,194],{},"docx",[169,196,197],{},"phpword",[154,199,200,203],{},[169,201,202],{},"nodemailer",[169,204,205],{},"phpmailer",[154,207,208,211],{},[169,209,210],{},"uuid",[169,212,23],{},[154,214,215,218],{},[169,216,217],{},"crypto-js",[169,219,220],{},"builtin",[154,222,223,226],{},[169,224,225],{},"exceljs",[169,227,228],{},"phpspreadsheet",[154,230,231,234],{},[169,232,233],{},"fastq",[169,235,236],{},"symfony messenger \u002F laravel",[154,238,239,242],{},[169,240,241],{},"orm",[169,243,244],{},"doctrine orm \u002F eloquent orm",[154,246,247,250],{},[169,248,249],{},"zod",[169,251,252],{},"symfony validator \u002F respect validateion",[154,254,255,258],{},[169,256,257],{},"validate",[169,259,260],{},"WebGeeker-Validation",[26,262,263],{"id":263},"thinkphp",[31,265,266],{},[34,267,268,271],{},[17,269,270],{},"imagecreate()"," 找不到，要装 php-gd。",[26,273,274],{"id":274},"laravel",[31,276,277,284],{},[34,278,279,280,283],{},"create 之后要 ",[17,281,282],{},"composer install","。",[34,285,286],{},"sanctum：",[48,288,290],{"className":50,"code":289,"language":52,"meta":53,"style":53},"php artisan session:table\nphp artisan migrate\n",[17,291,292,303],{"__ignoreMap":53},[57,293,294,297,300],{"class":59,"line":60},[57,295,296],{"class":63},"php",[57,298,299],{"class":66}," artisan",[57,301,302],{"class":66}," session:table\n",[57,304,305,307,309],{"class":59,"line":70},[57,306,296],{"class":63},[57,308,299],{"class":66},[57,310,311],{"class":66}," migrate\n",[31,313,314,317,326,333],{},[34,315,316],{},"csrf 要放 header 不然 laravel 这头猪不认。",[34,318,319,322,323,283],{},[17,320,321],{},"auth.php"," 里 ",[17,324,325],{},"guards.api.driver = sanctum",[34,327,328,322,330,283],{},[17,329,321],{},[17,331,332],{},"defaults.guard = web",[34,334,335,336,283],{},"User model extends ",[17,337,338],{},"Illuminate\\Foundation\\Auth\\User",[26,340,341],{"id":341},"现在回头看",[31,343,344,366,377,385],{},[34,345,346,347,349,350,353,354,349,356,353,359,349,362,365],{},"库名拼错了一堆：",[17,348,19],{}," 是 ",[17,351,352],{},"guzzle","，",[17,355,23],{},[17,357,358],{},"ramsey\u002Fuuid",[17,360,361],{},"respect validateion",[17,363,364],{},"Respect\\Validation","。当时全靠手打，一个都没查。",[34,367,368,369,372,373,376],{},"「csrf 要放 header」：Laravel 的 ",[17,370,371],{},"api"," 路由本来就不套 CSRF 中间件，我那时候多半是把 API 路由写进了 ",[17,374,375],{},"web"," 组，才一路撞到 419。",[34,378,379,381,382,283],{},[17,380,45],{}," 是 Debian 系才有的一套；换个发行版就得自己去改 ",[17,383,384],{},"php.ini",[34,386,387,388,391,392,394,395,398],{},"thinkphp 那条：装完 ",[17,389,390],{},"php-gd"," 还得确认 ",[17,393,384],{}," 里的 ",[17,396,397],{},"extension=gd"," 没被注释掉，不然一样报找不到函数。",[400,401,402],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":53,"searchDepth":404,"depth":404,"links":405},3,[406,407,408,409,410,411],{"id":28,"depth":70,"text":29},{"id":126,"depth":70,"text":126},{"id":145,"depth":70,"text":146},{"id":263,"depth":70,"text":263},{"id":274,"depth":70,"text":274},{"id":341,"depth":70,"text":341},"2021-11-07","学 PHP 时的几条笔记：扩展得自己开、composer 怎么用、一份 JS 到 PHP 的库对照表，还有 thinkphp 和 laravel 的零碎。",false,"md",{},true,"\u002Fposts\u002Funiversity-php-notes",{"title":5,"description":413},"posts\u002Funiversity-php-notes","从装环境到挑库，按 JS 的习惯找 PHP 的对应物，库名拼错了一堆。",[423,424],"PHP","大学旧笔记","HEXnnKFrYIhvvqu3fsyhQjRhwafbXlOApJFYO67IoIs",{"prev":427,"next":431},{"path":428,"title":429,"date":430},"\u002Fposts\u002Ftailwind-daisyui-theme","Tailwind 4 与 daisyUI 5 的主题、深色模式","2026-09-20",{"path":432,"title":433,"date":434},"\u002Fposts\u002Funiversity-excel-vba-macro","大学时写的第一段宏：比对 Excel 的两列","2020-06-13",1792556025030]