찾다
백엔드 개발PHP 튜토리얼이미지를 다른 사양의 이미지로 저장하는 PHP 코드

  1. /**

  2. 이미지 처리 수업
  3. */
  4. 클래스 이미지cls
  5. {
  6. / **
  7. * 파일정보
  8. */
  9. var $file = array();
  10. /**
  11. * 디렉토리 저장
  12. */
  13. var $dir = '';
  14. /**
  15. * 오류 코드
  16. */
  17. var $error_code = 0;
  18. /**
  19. * 최대 파일 업로드 크기 KB
  20. */
  21. var $max_size = -1;
  22. 함수 es_imagecls()

  23. {
  24. }

  25. 비공개 함수 checkSize($size)
  26. {
  27. return !($size > $this->max_size) || (-1 == $this->max_size);
  28. }
  29. /**
  30. * 업로드된 파일 처리
  31. * @param array $file 업로드된 파일
  32. * @param string $dir 저장된 디렉터리
  33. * @return bool
  34. */
  35. function init($file, $dir = 'temp')
  36. {
  37. if(!is_array($file) || 비어 있음($file) || !$this->isUploadFile($file['tmp_name']) || Trim($file['name']) = = '' || $file['size'] == 0)
  38. {
  39. $this->file = array();
  40. $this->error_code = -1;
  41. return false;
  42. }
  43. else
  44. {
  45. $file['size'] = intval($file['size']);
  46. $file['name'] = Trim( $file['name']);
  47. $file['thumb'] = '';
  48. $file['ext'] = $this->fileExt($file['name']);
  49. $file['name'] = htmlspecialchars($file['name'], ENT_QUOTES);
  50. $file['is_image'] = $this->isImageExt($file['ext']) ;
  51. $file['file_dir'] = $this->getTargetDir($dir);
  52. $file['prefix'] = md5(microtime(true)).rand(10,99);
  53. $file['target'] = "./public/".$file['file_dir'].'/'.$file['prefix'].'.jpg'; //상对
  54. $file['local_target'] = APP_ROOT_PATH."public/".$file['file_dir'].'/'.$file['prefix'].'.jpg';//물리
  55. $this->file = &$file;
  56. $this->error_code = 0;
  57. return true;
  58. }
  59. }
  60. * 파일 저장

  61. * @return bool
  62. */
  63. 함수 save()
  64. {
  65. if(empty($this->file) ||empty($this->file['tmp_name']) )
  66. $this->error_code = -101;
  67. elseif(!$this->checkSize($this->file['size']))
  68. $this->error_code = -105;
  69. elseif(!$this->file['is_image'])
  70. $this->error_code = -102;
  71. elseif(!$this->saveFile($this- >file['tmp_name'], $this->file['local_target']))
  72. $this->error_code = -103;
  73. elseif($this->file['is_image' ] &&
  74. (!$this->file['image_info'] = $this->getImageInfo($this->file['local_target'], true)))
  75. {
  76. $ this->error_code = -104;
  77. @unlink($this->file['local_target']);
  78. }
  79. else
  80. {
  81. $this->error_code = 0;
  82. true 반환;
  83. }
  84. false 반환;
  85. }
  86. /**

  87. * 오류 코드 받기
  88. * @반환 번호
  89. */
  90. 함수 오류()
  91. {
  92. return $this->error_code;
  93. }
  94. /**

  95. * 파일 확장자 가져오기
  96. * @return 문자열
  97. */
  98. function fileExt($file_name)
  99. {
  100. return addlashes(strtolower(substr(strrchr($file_name, '.'), 1, 10)));
  101. }
  102. /**

  103. * 확장자를 기준으로 파일이 이미지인지 판단
  104. * @param string $ext Extension
  105. * @return bool
  106. */
  107. function isImageExt($ext)
  108. {
  109. static $img_ext = array('jpg', 'jpeg', 'png', 'bmp','gif', 'giff');
  110. return in_array($ext, $img_ext) ? 1 : 0;
  111. }
  112. /**

  113. * 이미지 정보 가져오기
  114. * @param string $target 파일 경로
  115. * @return 혼합
  116. */
  117. 함수 getImageInfo($target)
  118. {
  119. $ext = es_imagecls::fileExt($target);
  120. $is_image = es_imagecls::isImageExt($ext) ;
  121. if(!$is_image)

  122. false 반환;
  123. elseif(!is_readable($target))
  124. false 반환;
  125. elseif($image_info = @getimagesize($target))
  126. {
  127. list($width, $height, $type) = !empty($image_info) ? $image_info :
  128. 배열('', '', '');
  129. $size = $width * $height;
  130. if($is_image && !in_array($type, array(1,2, 3,6,13)))
  131. false 반환;
  132. $image_info['type'] =

  133. strtolower (substr(image_type_to_extension($image_info[2]),1));
  134. return $image_info;
  135. }
  136. else
  137. return false;
  138. }
  139. /**

  140. * 파일 업로드 허용 여부 확인
  141. * @param string $source 파일 경로
  142. * @return bool
  143. */
  144. 함수 isUploadFile($source)
  145. {
  146. return $source && ($source != 'none') &&
  147. (is_uploaded_file($source) || is_uploaded_file (str_replace('\', '', $source)));
  148. }
  149. /**

  150. * 저장된 경로 가져오기
  151. * @param string $dir 지정된 저장 디렉터리
  152. * @return string
  153. */
  154. function getTargetDir($dir)
  155. {
  156. if (!is_dir(APP_ROOT_PATH."public/".$dir)) {
  157. @mkdir(APP_ROOT_PATH." public/".$dir);
  158. @chmod(APP_ROOT_PATH."public/".$dir, 0777);
  159. }
  160. return $dir;
  161. }
  162. /**

  163. * 저장 파일
  164. * @param string $source 소스 파일 경로
  165. * @param string $target 디렉터리 파일 경로
  166. * @return bool
  167. */
  168. 비공개 함수 saveFile($source, $target)
  169. {
  170. if(!es_imagecls::isUploadFile($source))
  171. $succeed = false;
  172. elseif(@copy($source, $target))
  173. $succeed = true;
  174. elseif(function_exists('move_uploaded_file') &&
  175. @move_uploaded_file($source, $target))
  176. $ 성공 = true;
  177. elseif (@is_readable($source) &&
  178. (@$fp_s = fopen($source, 'rb')) && (@$fp_t = fopen($target, 'wb')) )
  179. {
  180. while (!feof($fp_s))
  181. {
  182. $s = @fread($fp_s, 1024 * 512);
  183. @fwrite($fp_t, $s) ;
  184. }
  185. fclose($fp_s);
  186. fclose($fp_t);
  187. $succeed = true;
  188. }
  189. if($succeed)

  190. {
  191. $this->error_code = 0;
  192. @chmod($target, 0644);
  193. @unlink($source);
  194. }
  195. else
  196. {
  197. $this->error_code = 0;
  198. }
  199. return $succeed;

  200. }
  201. 공용 함수 Thumb($image,$maxWidth=200,$maxHeight=50,$gen = 0,

  202. $interlace=true,$filepath = '',$is_preview = true)
  203. {
  204. $info = es_imagecls::getImageInfo($image);
  205. if($info !== false)

  206. {
  207. $srcWidth = $info[0];
  208. $srcHeight = $info[1];
  209. $type = $info['type'] ;
  210. $인터레이스 = $인터레이스? 1:0;

  211. 설정 해제($info);
  212. if($maxWidth > 0 && $maxHeight > 0)

  213. $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight);
  214. // 计算缩放比例
  215. elseif($maxWidth == 0)
  216. $scale = $maxHeight/$srcHeight;
  217. elseif($maxHeight == 0)
  218. $scale = $maxWidth /$srcWidth;
  219. $paths = pathinfo($image);
  220. $paths['filename'] = Trim(strtolower($paths['basename']),
  221. ".".strtolower($paths['extension) ']));
  222. $basefilename = 폭발("_",$paths['filename']);
  223. $basefilename = $basefilename[0];
  224. if(empty($filepath))
  225. {
  226. if($is_preview)
  227. $thumbname = $paths['dirname'].'/'.$basefilename.
  228. '_'.$maxWidth.'x'.$maxHeight.' .jpg';
  229. else
  230. $thumbname = $paths['dirname'].'/'.$basefilename.
  231. 'o_'.$maxWidth.'x'.$maxHeight.'.jpg' ;
  232. }
  233. else
  234. $thumbname = $filepath;
  235. $thumburl = str_replace(APP_ROOT_PATH,'./',$thumbname);

  236. if($scale >= 1)
  237. {
  238. // 超过하라图大小不再缩略
  239. $width = $srcWidth;
  240. $height = $srcHeight;
  241. if(!$is_preview)
  242. {
  243. //비预览模式写入原图
  244. file_put_contents($thumbname,file_get_contents($image)); //용원원图写入
  245. return array('url'=>$thumburl,'path'=>$thumbname);
  246. }
  247. }
  248. else
  249. {
  250. // 缩略图尺寸
  251. $width = (int)($srcWidth*$scale);
  252. $height = (int)($srcHeight*$scale);
  253. }
  254. if($gen == 1)
  255. {
  256. $width = $maxWidth;
  257. $height = $maxHeight;
  258. }
  259. // 载入하라图

  260. $createFun = 'imagecreatefrom'.($type=='jpg'?'jpeg':$type);
  261. if(!function_exists($createFun))
  262. $createFun = 'imagecreatefromjpeg';
  263. $srcImg = $createFun($image);

  264. //创建缩略图

  265. if($type!='gif' && function_exists('imagecreatetruecolor'))
  266. $thumbImg = imagecreatetruecolor($width, $height);
  267. else
  268. $thumbImg = imagecreate($width, $height);
  269. $x = 0;

  270. $y = 0;
  271. if($gen == 1 && $maxWidth > 0 && $maxHeight > 0)

  272. {
  273. $resize_ratio = $maxWidth/$maxHeight;
  274. $src_ratio = $srcWidth/$srcHeight;
  275. if($src_ratio >= $resize_ratio)
  276. {
  277. $x = ($srcWidth - ($resize_ratio * $srcHeight)) / 2;
  278. $width = ($height * $srcWidth) / $srcHeight;
  279. }
  280. else
  281. {
  282. $y = ($srcHeight - ((1 / $resize_ratio) * $srcWidth)) / 2;
  283. $height = ($width * $srcHeight) / $srcWidth;
  284. }
  285. }
  286. // 复 제조사 사진

  287. if(function_exists("imagecopyresampled"))
  288. imagecopyresampled($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height,
  289. $srcWidth,$ srcHeight);
  290. else
  291. imagecopyreized($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height,
  292. $srcWidth,$srcHeight);
  293. if(' gif'==$type || 'png'==$type) {
  294. $Background_color = imagecolorallocate($thumbImg, 0,255,0); // 指派一个绿color
  295. imagecolortransparent($thumbImg,$Background_color);
  296. // 设置为透明color,若注释掉该行则输流绿color的图
  297. }
  298. // 对jpeg图shape设置隔行扫描

  299. if('jpg'==$type || 'jpeg'==$type)
  300. imageinterlace($thumbImg,$interlace);
  301. // 생성그림

  302. imagejpeg($thumbImg,$thumbname,100);
  303. imagedestroy($thumbImg);
  304. imagedestroy($srcImg);
  305. return array('url'=>$thumburl,'path'=>$thumbname);

  306. }
  307. return false;
  308. }
  309. 공개 함수 make_thumb($srcImg,$srcWidth,$srcHeight,$type,$maxWidth=200,

  310. $maxHeight=50,$gen = 0)
  311. {
  312. $인터레이스 = $인터레이스? 1:0;

  313. if($maxWidth > 0 && $maxHeight > 0)

  314. $scale = min($maxWidth/$srcWidth, $maxHeight/$srcHeight);
  315. // 计算缩放比例
  316. elseif($maxWidth == 0)
  317. $scale = $maxHeight/$srcHeight;
  318. elseif($maxHeight == 0)
  319. $scale = $maxWidth/$srcWidth;
  320. = 1)

  321. {
  322. // 超过하라图大小不再缩略
  323. $width = $srcWidth;
  324. $height = $srcHeight;
  325. }
  326. else
  327. {
  328. // 缩略图尺寸
  329. $width = (int)($srcWidth*$scale);
  330. $height = (int)($srcHeight*$scale);
  331. }
  332. if($gen == 1)

  333. {
  334. $width = $maxWidth;
  335. $height = $maxHeight;
  336. }
  337. / /创建缩略图
  338. if($type!='gif' && function_exists('imagecreatetruecolor'))
  339. $thumbImg = imagecreatetruecolor($width, $height);
  340. else
  341. $thumbImg = imagecreatetruecolor ($너비, $높이);
  342. $x = 0;

  343. $y = 0;
  344. if($gen == 1 && $maxWidth > 0 && $maxHeight > 0)

  345. {
  346. $resize_ratio = $maxWidth/$maxHeight;
  347. $src_ratio = $srcWidth/$srcHeight;
  348. if($src_ratio >= $resize_ratio)
  349. {
  350. $x = ($srcWidth - ($resize_ratio * $srcHeight)) / 2;
  351. $width = ($height * $srcWidth) / $srcHeight;
  352. }
  353. else
  354. {
  355. $y = ($srcHeight - ((1 / $resize_ratio) * $srcWidth)) / 2;
  356. $height = ($width * $srcHeight) / $srcWidth;
  357. }
  358. }
  359. // 이미지 복사

  360. if(function_exists("imagecopyresampled"))
  361. imagecopyresampled($thumbImg, $srcImg, 0, 0, $x, $y, $ 너비, $height,
  362. $srcWidth,$srcHeight);
  363. else
  364. imagecopyreized($thumbImg, $srcImg, 0, 0, $x, $y, $width, $height,
  365. $ srcWidth,$srcHeight);
  366. if('gif'==$type || 'png'==$type) {
  367. $Background_color = imagecolorallocate($thumbImg, 255,255,255)
  368. // 할당 Green
  369. imagecolortransparent($thumbImg,$Background_color)
  370. // 투명색으로 설정, 이 줄을 주석 처리하면 녹색 이미지가 출력됩니다.
  371. }
  372. / / JPEG 그래픽에 대한 인터레이스 설정
  373. if('jpg'==$type || 'jpeg'==$type)
  374. imageinterlace($thumbImg,$interlace);
  375. < ;p> return $thumbImg;
  376. }

  377. 공개 함수 water($source,$water,$alpha=80,$position=" 0" )
  378. {
  379. //파일이 존재하는지 확인
  380. if(!file_exists($source)||!file_exists($water))
  381. return false;
  382. //이미지 정보

  383. $sInfo = es_imagecls::getImageInfo($source);
  384. $wInfo = es_imagecls::getImageInfo($water);
  385. if($sInfo["0"] return false;

  386. if(is_animated_gif($source))
  387. {
  388. require_once APP_ROOT_PATH. "system/utils/gif_encoder.php" ;
  389. require_once APP_ROOT_PATH."system/utils/gif_reader.php";
  390. $gif = new GIFReader();

  391. $ gif->load($source) ;
  392. foreach($gif->IMGS['frames'] as $k=>$img)
  393. {
  394. $im = imagecreatefromstring($gif- >getgif($k));
  395. //im에 워터마크 추가
  396. $sImage=$im
  397. $wCreateFun="imagecreatefrom".$wInfo['type'];
  398. if( !function_exists($wCreateFun))
  399. $wCreateFun = 'imagecreatefromjpeg';
  400. $wImage=$wCreateFun($water);
  401. //이미지 블렌딩 모드 설정
  402. imagealphablending($wImage , true)
  403. 스위치 (intval($position))
  404. {
  405. 사례 0: 중단;
  406. //왼쪽 상단
  407. 사례 1:
  408. $posY=0;
  409. $posX=0;
  410. //혼합 이미지 생성
  411. imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha) ;
  412. break;
  413. //오른쪽 위
  414. 사례 2:
  415. $posY=0;
  416. $posX=$sInfo[0]-$wInfo[0];
  417. // 혼합 이미지 생성
  418. imagecopymerge($sImage , $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);
  419. break;
  420. // 왼쪽 하단
  421. 사례 3:
  422. $posY=$sInfo[1]-$wInfo[1];
  423. $posX=0;
  424. //혼합 이미지 생성
  425. imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);
  426. break;
  427. //오른쪽 아래
  428. 사례 4:
  429. $posY=$sInfo[1]-$wInfo [1];
  430. $posX=$sInfo[0]-$wInfo[0];
  431. //혼합 이미지 생성
  432. imagecopymerge($sImage, $ wImage, $posX, $posY, 0, 0 , $wInfo[0],$wInfo[1],$alpha);
  433. break;
  434. //중앙
  435. 사례 5:
  436. $posY =$sInfo[1]/2-$wInfo [1]/2;
  437. $posX=$sInfo[0]/2-$wInfo[0]/2;
  438. //혼합 이미지 생성
  439. imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);
  440. break;
  441. }
  442. //end im 워터마크 있음
  443. ob_start();
  444. imagegif($sImage);
  445. $content = ob_get_contents();
  446. ob_end_clean();
  447. $frames [ ] = $content ;
  448. $framed [ ] = $ img['frameDelay'];
  449. }
  450. $gif_maker = 새 GIFEncoder(
  451. $frames,
  452. $framed,
  453. 0,
  454. 2,
  455. 0, 0, 0,
  456. "bin" //bin은 바이너리 URL입니다.
  457. );
  458. $image_rs = $gif_maker->GetAnimation ( );
  459. //저장 파일 이름을 지정하지 않으면 기본값은 원본 이미지 이름입니다.
  460. @unlink($source);
  461. //이미지 저장
  462. file_put_contents($ 소스,$image_rs);
  463. true를 반환합니다.
  464. }
  465. //이미지 생성
  466. $sCreateFun="imagecreatefrom".$sInfo['type'];
  467. if(!function_exists($sCreateFun))
  468. $sCreateFun = 'imagecreatefromjpeg';
  469. $sImage=$sCreateFun($source);
  470. $wCreateFun="imagecreatefrom".$wInfo['type'];

  471. if(!function_exists($wCreateFun ))
  472. $wCreateFun = 'imagecreatefromjpeg';
  473. $wImage=$wCreateFun($water);
  474. //이미지 블렌딩 모드 설정

  475. imagealphablending( $ wImage, true);
  476. 스위치 (intval($position))

  477. {
  478. 사례 0: 중단;
  479. //왼쪽 위
  480. 사례 1:
  481. $posY=0;
  482. $posX=0;
  483. //혼합 이미지 생성
  484. imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0] ,$wInfo[1],$alpha);
  485. break;
  486. //오른쪽 위
  487. 사례 2:
  488. $posY=0;
  489. $posX=$sInfo[0]-$ wInfo [0];
  490. //혼합 이미지 생성
  491. imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);
  492. break;
  493. //왼쪽 아래
  494. 사례 3:
  495. $posY=$sInfo[1]-$wInfo[1];
  496. $posX=0;
  497. //생성 혼합 이미지
  498. imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);
  499. break;
  500. //하단 오른쪽
  501. 사례 4:
  502. $posY=$sInfo[1]-$wInfo[1];
  503. $posX=$sInfo[0]-$wInfo[0];
  504. //혼합 생성 image
  505. imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);
  506. break;
  507. //중앙
  508. 사례 5:
  509. $posY=$sInfo[1]/2-$wInfo[1]/2;
  510. $posX=$sInfo[0]/2-$wInfo[0]/2;
  511. //혼합 이미지 생성
  512. imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo[0],$wInfo[1],$alpha);
  513. break;
  514. }
  515. //저장 파일 이름이 지정되지 않은 경우 기본값은 원본 이미지 이름입니다.

  516. @unlink($source);
  517. //이미지 저장
  518. imagejpeg( $sImage,$source,100);
  519. imagedestroy($sImage);
  520. }
  521. }
  522. if(!function_exists('image_type_to_extension) '))

  523. {
  524. function image_type_to_extension($imagetype)
  525. {
  526. if(empty($imagetype))
  527. return false;
  528. ($imagetype)

  529. {
  530. 사례 IMAGETYPE_GIF : '.gif' 반환;
  531. 사례 IMAGETYPE_JPEG : '.jpeg' 반환;
  532. 사례 IMAGETYPE_PNG : '.png' 반환;
  533. 사례 IMAGETYPE_SWF : return '.swf' ;
  534. 사례 IMAGETYPE_PSD : '.psd' 반환;
  535. 사례 IMAGETYPE_BMP : '.bmp' 반환;
  536. 사례 IMAGETYPE_TIFF_II : '.tiff' 반환;
  537. 사례 IMAGETYPE_TIFF_MM : ' 반환 .tiff';
  538. 사례 IMAGETYPE_JPC : '.jpc' 반환;
  539. 사례 IMAGETYPE_JP2 : '.jp2' 반환;
  540. 사례 IMAGETYPE_JPX : '.jpf' 반환;
  541. 사례 IMAGETYPE_JB2 : '.jb2 반환 ';
  542. 사례 IMAGETYPE_SWC : '.swc' 반환;
  543. 사례 IMAGETYPE_IFF : '.aiff' 반환;
  544. 사례 IMAGETYPE_WBMP : '.wbmp' 반환;
  545. 사례 IMAGETYPE_XBM : '.xbm' 반환;
  546. 기본값 : false 반환;
  547. }
  548. }
  549. }
  550. ?>
코드 복사

2.get_spec_img()는 이미지 클래스를 호출한 후 다음 메소드를 사용하여 서로 다른 사양의 이미지를 저장하고 이미지 연결을 반환합니다.

  1. //해당 사양의 이미지 주소를 가져옵니다.
  2. //gen=0: 스케일링 비율을 유지하고 예를 들어 높이가 0이면 너비가 비례적으로 조정됩니다. gen=1: 길이와 너비가 보장되고 잘립니다.
  3. function get_spec_image($img_path,$width=0,$height=0 ,$gen=0,$is_preview=true)
  4. {
  5. if($width==0)
  6. $new_path = $img_path;
  7. else
  8. {
  9. $img_name = substr ($img_path,0,-4);
  10. $img_ext = substr($img_path,-3);
  11. if($is_preview)
  12. $new_path = $img_name."_".$width." x".$height.".jpg";
  13. else
  14. $new_path = $img_name."o_".$width."x".$height.".jpg";
  15. if(!file_exists ($new_path))
  16. {
  17. require_once "imagecls.php";
  18. $imagec = 새 imagecls();
  19. $thumb = $imagec->thumb($img_path,$width,$ height,$gen,true,"
  20. ", $is_preview);
  21. if(app_conf("PUBLIC_DOMAIN_ROOT")!='')
  22. {
  23. $paths = pathinfo($new_path );
  24. $path = str_replace("./ ","",$paths['dirname']);
  25. $filename = $paths['basename'];
  26. $pathwithoupublic = str_replace(" public/","",$path);
  27. $file_data = @file_get_contents($path.$file);
  28. $img = @imagecreatefromstring($file_data);
  29. if($img !==false)
  30. {
  31. $ save_path = "public/".$path;
  32.     if(!is_dir($save_path))
  33.                                                                                                                                                이름,$file_data);
  34.   }
  35. }
  36. }
  37. }
  38. return $new_path;
  39. }
  40. 코드 복사
3.

//im: 매장 이미지를 3가지 사양으로 저장: 소형 이미지: 48x48, 중형 이미지 120x120, 대형 이미지 200x200
    $small_url=get_spec_image($ data['image'],48,48,0);
  1. $
  2. middle_url
  3. =get_spec_image($data['image'],120,120,0);
  4. $big_url=get_spec_image($data['image'],200,200,0);
  5. 코드 복사
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
과대 광고 : 오늘 PHP의 역할을 평가합니다과대 광고 : 오늘 PHP의 역할을 평가합니다Apr 12, 2025 am 12:17 AM

PHP는 현대적인 프로그래밍, 특히 웹 개발 분야에서 강력하고 널리 사용되는 도구로 남아 있습니다. 1) PHP는 사용하기 쉽고 데이터베이스와 완벽하게 통합되며 많은 개발자에게 가장 먼저 선택됩니다. 2) 동적 컨텐츠 생성 및 객체 지향 프로그래밍을 지원하여 웹 사이트를 신속하게 작성하고 유지 관리하는 데 적합합니다. 3) 데이터베이스 쿼리를 캐싱하고 최적화함으로써 PHP의 성능을 향상시킬 수 있으며, 광범위한 커뮤니티와 풍부한 생태계는 오늘날의 기술 스택에 여전히 중요합니다.

PHP의 약한 참고 자료는 무엇이며 언제 유용합니까?PHP의 약한 참고 자료는 무엇이며 언제 유용합니까?Apr 12, 2025 am 12:13 AM

PHP에서는 약한 참조가 약한 회의 클래스를 통해 구현되며 쓰레기 수집가가 물체를 되 찾는 것을 방해하지 않습니다. 약한 참조는 캐싱 시스템 및 이벤트 리스너와 같은 시나리오에 적합합니다. 물체의 생존을 보장 할 수 없으며 쓰레기 수집이 지연 될 수 있음에 주목해야합니다.

PHP의 __invoke 마법 방법을 설명하십시오.PHP의 __invoke 마법 방법을 설명하십시오.Apr 12, 2025 am 12:07 AM

\ _ \ _ 호출 메소드를 사용하면 객체를 함수처럼 호출 할 수 있습니다. 1. 객체를 호출 할 수 있도록 메소드를 호출하는 \ _ \ _ 정의하십시오. 2. $ obj (...) 구문을 사용할 때 PHP는 \ _ \ _ invoke 메소드를 실행합니다. 3. 로깅 및 계산기, 코드 유연성 및 가독성 향상과 같은 시나리오에 적합합니다.

동시성에 대해 PHP 8.1의 섬유를 설명하십시오.동시성에 대해 PHP 8.1의 섬유를 설명하십시오.Apr 12, 2025 am 12:05 AM

섬유는 PHP8.1에 도입되어 동시 처리 기능을 향상시켰다. 1) 섬유는 코 루틴과 유사한 가벼운 동시성 모델입니다. 2) 개발자는 작업의 실행 흐름을 수동으로 제어 할 수 있으며 I/O 집약적 작업을 처리하는 데 적합합니다. 3) 섬유를 사용하면보다 효율적이고 반응이 좋은 코드를 작성할 수 있습니다.

PHP 커뮤니티 : 자원, 지원 및 개발PHP 커뮤니티 : 자원, 지원 및 개발Apr 12, 2025 am 12:04 AM

PHP 커뮤니티는 개발자 성장을 돕기 위해 풍부한 자원과 지원을 제공합니다. 1) 자료에는 공식 문서, 튜토리얼, 블로그 및 Laravel 및 Symfony와 같은 오픈 소스 프로젝트가 포함됩니다. 2) 지원은 StackoverFlow, Reddit 및 Slack 채널을 통해 얻을 수 있습니다. 3) RFC에 따라 개발 동향을 배울 수 있습니다. 4) 적극적인 참여, 코드에 대한 기여 및 학습 공유를 통해 커뮤니티에 통합 될 수 있습니다.

PHP vs. Python : 차이점 이해PHP vs. Python : 차이점 이해Apr 11, 2025 am 12:15 AM

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.

PHP : 죽어 가거나 단순히 적응하고 있습니까?PHP : 죽어 가거나 단순히 적응하고 있습니까?Apr 11, 2025 am 12:13 AM

PHP는 죽지 않고 끊임없이 적응하고 진화합니다. 1) PHP는 1994 년부터 새로운 기술 트렌드에 적응하기 위해 여러 버전 반복을 겪었습니다. 2) 현재 전자 상거래, 컨텐츠 관리 시스템 및 기타 분야에서 널리 사용됩니다. 3) PHP8은 성능과 현대화를 개선하기 위해 JIT 컴파일러 및 기타 기능을 소개합니다. 4) Opcache를 사용하고 PSR-12 표준을 따라 성능 및 코드 품질을 최적화하십시오.

PHP의 미래 : 적응 및 혁신PHP의 미래 : 적응 및 혁신Apr 11, 2025 am 12:01 AM

PHP의 미래는 새로운 기술 트렌드에 적응하고 혁신적인 기능을 도입함으로써 달성 될 것입니다. 1) 클라우드 컴퓨팅, 컨테이너화 및 마이크로 서비스 아키텍처에 적응, Docker 및 Kubernetes 지원; 2) 성능 및 데이터 처리 효율을 향상시키기 위해 JIT 컴파일러 및 열거 유형을 도입합니다. 3) 지속적으로 성능을 최적화하고 모범 사례를 홍보합니다.

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

인기 기사

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

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구