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