백엔드 개발 PHP 튜토리얼 매우 간단한 PHPMVC

매우 간단한 PHPMVC

Jul 25, 2016 am 08:47 AM

기본 PHP 구문을 사용하여 페이지를 렌더링하고 위젯 기능을 제공합니다.
  1. /**
  2. * 구성 매개변수 가져오기 및 설정은 일괄 정의를 지원합니다
  3. * $key가 연관 배열인 경우 구성은 K-V 형식으로 작성됩니다.
  4. * $key가 숫자 인덱스 배열인 경우 해당 구성은 반환됩니다 Array
  5. * @param string|array $key 구성 변수
  6. * @param array|null $value 구성 값
  7. * @return array|null
  8. */
  9. 함수 C($key,$value=null){
  10. 정적 $_config = 배열 ();
  11. $args = func_num_args();
  12. if($args == 1){
  13. if(is_string($key)){ //수신 키가 문자열인 경우
  14. return isset($_config[$key])?$_config[$key]:null;
  15. }
  16. if(is_array($key)){
  17. if(array_keys($key) !== 범위( 0, count($key) - 1)){ //수신 키가 연관 배열인 경우
  18. $_config = array_merge($_config, $key);
  19. }else{
  20. $ret = array ();
  21. foreach ($key를 $k로) {
  22. $ret[$k] = isset($_config[$k])?$_config[$k]:null;
  23. }
  24. return $ret;
  25. }
  26. }
  27. }else{
  28. if(is_string($key)){
  29. $_config[$key] = $value;
  30. }else {
  31. halt('전달된 매개변수가 올바르지 않습니다.');
  32. }
  33. }
  34. return null;
  35. }
  36. /**
  37. * 위젯 호출
  38. * @param string $name 위젯 이름
  39. * @param array $data 위젯에 전달된 변수 목록, 키는 변수 이름, 값은 변수 값
  40. * @return void
  41. */
  42. function W( $name, $data = array()){
  43. $fullName = $name.'Widget';
  44. if(!class_exists($fullName)){
  45. halt('Widget '.$name.' 존재하지 않음');
  46. }
  47. $widget = new $fullName();
  48. $widget->invoke($data);
  49. }
  50. /**
  51. * 프로그램 실행 종료
  52. * @param string $str 종료 이유
  53. * @param bool $display 콜 스택 표시 여부, 기본적으로 표시되지 않음
  54. * @return void
  55. * /
  56. function quit($str, $display=false){
  57. Log::fatal($str.' debug_backtrace:'.var_export(debug_backtrace(), true));
  58. header("Content- :text/html; charset=utf-8");
  59. if($display){
  60. echo "
    ";
  61. debug_print_backtrace();
  62. echo "}
  63. echo $str;
  64. exit;
  65. }
  66. /**
  67. * 데이터베이스 인스턴스 가져오기
  68. * @return DB
  69. */
  70. function M(){
  71. $dbConf = C( 배열('DB_HOST','DB_PORT','DB_USER','DB_PWD','DB_NAME','DB_CHARSET'));
  72. return DB::getInstance($dbConf);
  73. }
  74. /* *
  75. * 파일이 존재하는 경우 포함
  76. * @param string $path 파일 경로
  77. * @return void
  78. */
  79. 함수 includeIfExist($path){
  80. if(file_exists($path)){
  81. include $path;
  82. }
  83. }
  84. /**
  85. * 일반 제어 카테고리
  86. */
  87. class SinglePHP {
  88. /**
  89. * 컨트롤러
  90. * @var 문자열
  91. */
  92. private $c;
  93. /**
  94. * 액션
  95. * @var 문자열
  96. */
  97. private $a;
  98. / * *
  99. * 싱글톤
  100. * @var SinglePHP
  101. */
  102. 비공개 정적 $_instance;
  103. /**
  104. * 생성자, 초기화 구성
  105. * @param array $conf
  106. */
  107. 비공개 함수 __construct($conf){
  108. C($conf);
  109. }
  110. 비공개 함수 __clone(){}
  111. /**
  112. * 단일 인스턴스 가져오기
  113. * @param array $conf
  114. * @return SinglePHP
  115. */
  116. 공용 정적 함수 getInstance($conf){
  117. if(!(self::$_instance instanceof self)){
  118. self::$_instance = new self($conf);
  119. }
  120. return self::$_instance;
  121. }
  122. /**
  123. * 애플리케이션 인스턴스 실행
  124. * @access public
  125. * @return void
  126. */
  127. 공개 함수 실행(){
  128. if(C('USE_SESSION') == true){
  129. session_start();
  130. }
  131. C('APP_FULL_PATH', getcwd().'/'.C( ' APP_PATH').'/');
  132. includeIfExist( C('APP_FULL_PATH').'/common.php');
  133. $pathMod = C('PATH_MOD');
  134. $pathMod = 비어 있음 ( $pathMod)?'NORMAL':$pathMod;
  135. spl_autoload_register(array('SinglePHP', 'autoload'));
  136. if(strcmp(strtoupper($pathMod),'NORMAL') === 0 | !isset($_SERVER['PATH_INFO'])){
  137. $this->c = isset($_GET['c'])?$_GET['c']:'색인';
  138. $this->a = isset($_GET['a'])?$_GET['a']:'Index';
  139. }else{
  140. $pathInfo = isset($_SERVER['PATH_INFO ' ])?$_SERVER['PATH_INFO']:'';
  141. $pathInfoArr =explod('/',trim($pathInfo,'/'));
  142. if(isset($pathInfoArr[0] ) && $pathInfoArr[0] !== ''){
  143. $this->c = $pathInfoArr[0];
  144. }else{
  145. $this->c = '색인';
  146. }
  147. if(isset($pathInfoArr[1])){
  148. $this->a = $pathInfoArr[1];
  149. }else{
  150. $this->a = '색인';
  151. }
  152. }
  153. if(!class_exists($this->c.'Controller')){
  154. halt('Controller'.$this->c. '존재하지 않습니다');
  155. }
  156. $controllerClass = $this->c.'Controller';
  157. $controller = new $controllerClass();
  158. if(!method_exists($controller , $this->a.'Action')){
  159. halt('Method'.$this->a.'존재하지 않습니다');
  160. }
  161. call_user_func(array($controller ,$ this->a.'Action'));
  162. }
  163. /**
  164. * 자동 로딩 기능
  165. * @param string $class 클래스명
  166. */
  167. 공용 정적 함수 autoload($class){
  168. if(substr($class ,- 10)=='컨트롤러'){
  169. includeIfExist(C('APP_FULL_PATH').'/Controller/'.$class.'.class.php');
  170. }elseif(substr($class ,- 6)=='위젯'){
  171. includeIfExist(C('APP_FULL_PATH').'/Widget/'.$class.'.class.php');
  172. }else{
  173. includeIfExist(C('APP_FULL_PATH').'/Lib/'.$class.'.class.php');
  174. }
  175. }
  176. }
  177. /**
  178. * 컨트롤러 클래스
  179. */
  180. 클래스 컨트롤러 {
  181. /**
  182. * 인스턴스 보기
  183. * @var 보기
  184. */
  185. private $_view;
  186. /**
  187. * 생성자, 뷰 인스턴스 초기화, 후크 호출
  188. */
  189. public 함수 __construct(){
  190. $this->_view = new View();
  191. $this->_init();
  192. }
  193. /**
  194. * 프리훅
  195. */
  196. 보호된 함수 _init(){}
  197. /**
  198. * 템플릿 렌더링 및 출력
  199. * @param null|string $tpl 템플릿 파일 경로
  200. * 매개변수는 앱/뷰/파일에 대한 상대 경로이며 다음과 같은 접미사 이름을 포함하지 않습니다. index/index
  201. * 매개변수가 비어 있는 경우 기본값은 $controller/$action.php
  202. * 매개변수에 "/"가 포함되어 있지 않으면 기본값은 $controller/$tpl
  203. * @ 무효 반환
  204. */
  205. 보호된 함수 표시($tpl=''){
  206. if($tpl === ''){
  207. $trace = debug_backtrace();
  208. $controller = substr($trace[1]['class'], 0, -10);
  209. $action = substr($trace[1]['function'], 0 , -6);
  210. $tpl = $컨트롤러 . '/' . $action;
  211. }elseif(strpos($tpl, '/') === false){
  212. $trace = debug_backtrace();
  213. $controller = substr($trace[1]['class '], 0, -10);
  214. $tpl = $controller . '/' . $tpl;
  215. }
  216. $this->_view->display($tpl);
  217. }
  218. /**
  219. * 뷰 엔진에 대한 템플릿 변수 설정
  220. * @param string $name 템플릿에서 사용할 변수 이름
  221. * @param mix $value 템플릿의 변수 이름에 해당하는 값
  222. * @ 반환 무효
  223. */
  224. 보호된 함수 할당($name, $value){
  225. $this->_view->할당($name,$value);
  226. }
  227. /**
  228. * 데이터를 json 형식으로 브라우저에 출력하고 코드 실행을 중지합니다
  229. * @param array $data 출력할 데이터
  230. */
  231. 보호된 함수 ajaxReturn($data) {
  232. echo json_encode($data);
  233. exit;
  234. }
  235. /**
  236. * 지정된 URL로 리디렉션
  237. * @param string $url 리디렉션할 URL
  238. * @param void
  239. */
  240. 보호된 함수 리디렉션($url){
  241. header("위치: $url");
  242. exit;
  243. }
  244. }
  245. /**
  246. * 수업 보기
  247. */
  248. 클래스 보기 {
  249. /**
  250. * 파일 디렉터리 보기
  251. * @var string
  252. */
  253. 비공개 $_tplDir;
  254. /**
  255. * 파일 경로 보기
  256. * @var string
  257. */
  258. 비공개 $_viewPath;
  259. /**
  260. * 변수 목록 보기
  261. * @var array
  262. */
  263. 비공개 $_data = array();
  264. /**
  265. * tplInclude용 변수 목록
  266. * @var array
  267. */
  268. 비공개 정적 $tmpData;
  269. /**
  270. * @param 문자열 $tplDir
  271. */
  272. 공용 함수 __construct($tplDir=''){
  273. if($tplDir == ''){
  274. $this->_tplDir = './'.C('APP_PATH').'/View/';
  275. }else{
  276. $this->_tplDir = $tplDir;
  277. }
  278. }
  279. /**
  280. * 뷰 엔진에 대한 템플릿 변수 설정
  281. * @param string $key 템플릿에서 사용할 변수 이름
  282. * @param mix $value 템플릿의 변수 이름에 해당하는 값
  283. * @ 반환 무효
  284. */
  285. 공용 함수 할당($key, $value) {
  286. $this->_data[$key] = $value;
  287. }
  288. /**
  289. * 템플릿 렌더링 및 출력
  290. * @param null|string $tplFile 앱/뷰/파일을 기준으로 한 템플릿 파일 경로에는 인덱스/인덱스와 같은 접미사 이름이 포함되지 않습니다.
  291. * @return void
  292. */
  293. 공용 함수 표시($tplFile) {
  294. $this->_viewPath = $this->_tplDir . $tpl파일 . '.php';
  295. unset($tplFile);
  296. extract($this->_data);
  297. include $this->_viewPath;
  298. }
  299. /**
  300. * 템플릿 파일에 다른 템플릿을 포함하는 데 사용됩니다.
  301. * @param string $path View 디렉터리에 대한 상대 경로
  302. * @param array $data 하위 템플릿에 전달되는 변수 목록, 키 은 변수 이름이고, value는 변수 값입니다
  303. * @return void
  304. */
  305. 공용 정적 함수 tplInclude($path, $data=array()){
  306. self::$tmpData = array(
  307. 'path' => C('APP_FULL_PATH') .' /보기/' . $path . '.php',
  308. 'data' => $data,
  309. );
  310. unset($path);
  311. unset($data);
  312. extract(self::$tmpData['data']);
  313. include self::$tmpData['path'];
  314. }
  315. }
  316. /**
  317. * 위젯 클래스
  318. * 사용 시 이 클래스를 상속받아서 Invoke 메소드를 오버라이드하고, Invoke 메소드에서 display
  319. 를 호출해야 합니다.*/
  320. 클래스 위젯 {
  321. /**
  322. * 인스턴스 보기
  323. * @var 보기
  324. */
  325. protected $_view;
  326. /**
  327. * 위젯명
  328. * @var string
  329. */
  330. protected $_widgetName;
  331. /**
  332. * 생성자, 뷰 인스턴스 초기화
  333. */
  334. 공용 함수 __construct(){
  335. $this->_widgetName = get_class($this);
  336. $dir = C('APP_FULL_PATH') . '/Widget/Tpl/';
  337. $this->_view = new View($dir);
  338. }
  339. /**
  340. * 처리 로직
  341. * @param 혼합 $data 매개변수
  342. */
  343. 공용 함수 호출($data) {}
  344. /**
  345. * 렌더 템플릿
  346. * @param string $tpl 템플릿 경로, 비어 있으면 클래스 이름을 템플릿 이름으로 사용
  347. */
  348. 보호된 함수 표시($tpl=''){
  349. if($tpl == ''){
  350. $tpl = $this-> ;_widgetName;
  351. }
  352. $this->_view->display($tpl);
  353. }
  354. /**
  355. * 뷰 엔진에 대한 템플릿 변수 설정
  356. * @param string $name 템플릿에서 사용할 변수 이름
  357. * @param mix $value 템플릿의 변수 이름에 해당하는 값
  358. * @ 반환 무효
  359. */
  360. 보호된 함수 할당($name, $value){
  361. $this->_view->할당($name,$value);
  362. }
  363. }
  364. /**
  365. * 데이터베이스 작업 클래스
  366. * 사용 방법:
  367. * DB::getInstance($conf)->query('select * from table');
  368. * 여기서 $conf는 연관 배열입니다. , 다음 키를 포함해야 합니다:
  369. * DB_HOST DB_USER DB_PWD DB_NAME
  370. * DB_PORT 및 DB_CHARSET을 사용하여 포트와 인코딩을 지정할 수 있으며 기본값은 3306 및 utf8입니다
  371. */
  372. 클래스 DB {
  373. /**
  374. * 데이터베이스 링크
  375. * @var 리소스
  376. */
  377. 비공개 $_db;
  378. /**
  379. * 마지막 sql 저장
  380. * @var string
  381. */
  382. 비공개 $_lastSql;
  383. /**
  384. * 마지막 SQL 문의 영향을 받은 행 수
  385. * @var int
  386. */
  387. 비공개 $_rows;
  388. /**
  389. * 마지막 SQL 실행 오류
  390. * @var string
  391. */
  392. 비공개 $_error;
  393. /**
  394. * 인스턴스 배열
  395. * @var 배열
  396. */
  397. 비공개 정적 $_instance = array();
  398. /**
  399. * 생성자
  400. * @param array $dbConf 구성 배열
  401. */
  402. 비공개 함수 __construct($dbConf){
  403. if(!isset($dbConf['DB_CHARSET']) ){
  404. $dbConf['DB_CHARSET'] = 'utf8';
  405. }
  406. $this->_db = mysql_connect($dbConf['DB_HOST'].':'.$dbConf['DB_PORT '],$dbConf['DB_USER'],$dbConf['DB_PWD']);
  407. if($this->_db === false){
  408. halt(mysql_error());
  409. }
  410. $selectDb = mysql_select_db($dbConf['DB_NAME'],$this->_db);
  411. if($selectDb === false){
  412. halt(mysql_error());
  413. }
  414. mysql_set_charset($dbConf['DB_CHARSET']);
  415. }
  416. 비공개 함수 __clone(){}
  417. /**
  418. * DB 클래스 가져오기
  419. * @param array $dbConf 구성 배열
  420. * @return DB
  421. */
  422. 정적 공개 함수 getInstance($ dbConf){
  423. if(!isset($dbConf['DB_PORT'])){
  424. $dbConf['DB_PORT'] = '3306';
  425. }
  426. $key = $dbConf[' DB_HOST'].':'.$dbConf['DB_PORT'];
  427. if(!isset(self::$_instance[$key]) || !(self::$_instance[$key] self) ){
  428. self::$_instance[$key] = new self($dbConf);
  429. }
  430. return self::$_instance[$key];
  431. }
  432. /**
  433. * 이스케이프된 문자열
  434. * @param string $str 이스케이프할 문자열
  435. * @return string 이스케이프된 문자열
  436. */
  437. 공용 함수 escape($str){
  438. return mysql_real_escape_string($str, $this->_db);
  439. }
  440. /**
  441. * select 문에 사용되는 쿼리
  442. * @param string $sql 쿼리할 sql
  443. * @return bool|array 쿼리가 성공하면 해당 배열을 반환하고, 실패하면 해당 배열을 반환하고, 거짓
  444. */
  445. 공용 함수 쿼리($sql){
  446. $this->_rows = 0;
  447. $this->_error = '';
  448. $this->_lastSql = $sql;
  449. $this->logSql();
  450. $res = mysql_query($sql,$this->_db);
  451. if($res === false){
  452. $this->_error = mysql_error($this->_db);
  453. $this->logError();
  454. false 반환;
  455. }else{
  456. $this->_rows = mysql_num_rows($res) ;
  457. $result = array();
  458. if($this->_rows >0) {
  459. while($row = mysql_fetch_array($res, MYSQL_ASSOC)){
  460. $result[ ] = $row;
  461. }
  462. mysql_data_seek($res,0);
  463. }
  464. return $result;
  465. }
  466. }
  467. /**
  468. * 삽입/업데이트/삭제 문에 사용되는 쿼리
  469. * @param string $sql 쿼리할 SQL
  470. * @return bool|int 쿼리가 성공하면 영향을 받은 레코드 수를 반환하고, 실패하면 false를 반환합니다
  471. */
  472. 공용 함수 실행($sql) {
  473. $this->_rows = 0;
  474. $this->_error = '';
  475. $this->_lastSql = $sql;
  476. $this->logSql();
  477. $result = mysql_query($sql, $this->_db) ;
  478. if ( false === $result) {
  479. $this-> ;_error = mysql_error($this->_db);
  480. $this->logError();
  481. false 반환;
  482. } else {
  483. $this->_rows = mysql_affected_rows($ this->_db);
  484. return $this->_rows;
  485. }
  486. }
  487. /**
  488. * 마지막 쿼리의 영향을 받은 레코드 수 가져오기
  489. * @return int 영향을 받은 레코드 수
  490. */
  491. 공용 함수 getRows(){
  492. return $this->_rows;
  493. }
  494. /**
  495. * 마지막 삽입 이후 생성된 자동 증가 ID 가져오기
  496. * @return int 자동 증가 ID
  497. */
  498. 공개 함수 getInsertId() {
  499. return mysql_insert_id($this->_db);
  500. }
  501. /**
  502. * 마지막 쿼리의 sql 가져오기
  503. * @return string sql
  504. */
  505. 공용 함수 getLastSql(){
  506. return $this->_lastSql;
  507. }
  508. /**
  509. * 마지막 쿼리의 오류 정보 가져오기
  510. * @return 문자열 오류 정보
  511. */
  512. 공용 함수 getError(){
  513. return $this->_error;
  514. }
  515. /**
  516. * SQL을 파일에 기록
  517. */
  518. 비공개 함수 logSql(){
  519. Log::sql($this- >_lastSql);
  520. }
  521. /**
  522. * 오류 로그를 파일에 기록
  523. */
  524. 비공개 함수 logError(){
  525. $str = '[SQL ERR]'.$this->_error.' SQL:'.$this->_lastSql;
  526. 로그::warn($str);
  527. }
  528. }
  529. /**
  530. * 로그 클래스
  531. * 사용 방법: Log::fatal('error msg');
  532. * 저장 경로는 App/Log, 날짜별로 저장됩니다.
  533. * Fatal 및 warning은 에 기록됩니다. .wf 파일의 .log
  534. */
  535. 클래스 로그{
  536. /**
  537. * 로그, SAE 환경 지원
  538. * @param string $msg 로그 내용
  539. * @param string $level 로그 수준
  540. * @param bool $wf 오류 로그 여부
  541. */
  542. 공용 정적 함수 write($msg, $level='DEBUG', $wf=false){
  543. if(function_exists('sae_debug')){ //如果是SAE, 则使用sae_debug函数打日志
  544. $msg = "[{$level}]".$msg;
  545. sae_set_display_errors(false);
  546. sae_debug(trim($msg));
  547. sae_set_display_errors (참);
  548. }else{
  549. $msg = date('[ Y-m-d H:i:s ]')."[{$level}]".$msg."rn";
  550. $logPath = C('APP_FULL_PATH').'/Log/'.date('Ymd').'.log';
  551. if($wf){
  552. $logPath .= '.wf';
  553. }
  554. file_put_contents($logPath, $msg, FILE_APPEND);
  555. }
  556. }
  557. /**
  558. * 列印fatal日誌
  559. * @param string $msg 日誌資訊
  560. */
  561. 公用靜態函數fatal($msg){
  562. self::write($msg, 'FATAL', true);
  563. }
  564. /**
  565. * 列印warning日誌
  566. * @param string $msg 日誌資訊
  567. */
  568. 公用靜態函數warn($msg){
  569. self::write($msg, 'WARN', true);
  570. }
  571. /**
  572. * 列印notice日誌
  573. * @param string $msg 日誌資訊
  574. */
  575. 公共靜態函數通知($msg) {
  576. self::write($msg, '注意');
  577. }
  578. /**
  579. * 列印debug日誌
  580. * @param string $msg 日誌資訊
  581. */
  582. 公用靜態函式debug($msg){
  583. self:: write($msg, 'DEBUG');
  584. }
  585. /**
  586. * 列印sql日誌
  587. * @param string $msg 日誌資訊
  588. */
  589. 公用靜態函數sql($msg){
  590. self::write($msg, 'SQL ');
  591. }
  592. }
  593. /**
  594. * ExtException類,記錄額外的異常資訊
  595. */
  596. class ExtException extends Exception{
  597. /**
  598. * @var 陣列
  599. */
  600. protected $extra;/**
  601. * @param string $message
  602. * @param array $extra
  603. * @param int $code
  604. * @param null $previous
  605. */
  606. public function __construct($message = "", $extra = array(), $code = 0, $previous = null){
  607. $this->extra = $ extra;
  608. parent::__construct($message, $code, $previous);
  609. }
  610. /**
  611. * 取得額外的異常資訊
  612. * @return array
  613. */
  614. public function getExtra(){
  615. return $this this this ->extra;
  616. }
  617. }
複製程式碼


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 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 Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Laravel의 플래시 세션 데이터로 작업합니다 Laravel의 플래시 세션 데이터로 작업합니다 Mar 12, 2025 pm 05:08 PM

Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 Mar 14, 2025 am 11:42 AM

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Mar 12, 2025 pm 05:09 PM

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> ​​'Hello World', 'github.com'=> ​​[ 'foo'=> 'bar'], 'forge.laravel.com'=>

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Mar 13, 2025 pm 12:08 PM

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

PHP에서 늦은 정적 결합의 개념을 설명하십시오. PHP에서 늦은 정적 결합의 개념을 설명하십시오. Mar 21, 2025 pm 01:33 PM

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

프레임 워크 사용자 정의/확장 : 사용자 정의 기능을 추가하는 방법. 프레임 워크 사용자 정의/확장 : 사용자 정의 기능을 추가하는 방법. Mar 28, 2025 pm 05:12 PM

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.

프레임 워크 보안 기능 : 취약점 보호. 프레임 워크 보안 기능 : 취약점 보호. Mar 28, 2025 pm 05:11 PM

기사는 입력 유효성 검사, 인증 및 정기 업데이트를 포함한 취약점을 방지하기 위해 프레임 워크의 필수 보안 기능을 논의합니다.

See all articles