{"id":3781,"date":"2025-04-28T13:52:49","date_gmt":"2025-04-28T04:52:49","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=3781"},"modified":"2025-04-28T13:52:52","modified_gmt":"2025-04-28T04:52:52","slug":"%e3%80%90%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%e3%80%91php%e3%81%a7%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e8%aa%ad%e3%81%bf%e8%be%bc%e3%81%bf%e3%82%92%e6%a5%b5%e3%82%81%e3%82%8b10%e3%81%ae","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=3781","title":{"rendered":"\u3010\u5b8c\u5168\u30ac\u30a4\u30c9\u3011PHP\u3067\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u3092\u6975\u3081\u308b10\u306e\u5fc5\u9808\u30c6\u30af\u30cb\u30c3\u30af \u2014 \u521d\u5fc3\u8005\u304b\u3089\u4e0a\u7d1a\u8005\u307e\u3067"},"content":{"rendered":"\n<p>PHP\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u306f\u57fa\u672c\u304b\u3064\u91cd\u8981\u306a\u30b9\u30ad\u30eb\u3067\u3059\u3002\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u3001\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30c7\u30fc\u30bf\u306e\u51e6\u7406\u3001\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u5206\u6790\u306a\u3069\u3001\u3042\u3089\u3086\u308b\u5834\u9762\u3067\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u306e\u77e5\u8b58\u304c\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u5358\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u8aad\u3080\u3060\u3051\u3067\u306f\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u4e0d\u5341\u5206\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u52b9\u7387\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u306b\u306f\u3001\u9069\u5207\u306a\u95a2\u6570\u306e\u9078\u629e\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316\u3001\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3001\u305d\u3057\u3066\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u3055\u3089\u306b\u3001\u69d8\u3005\u306a\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306b\u5bfe\u5fdc\u3067\u304d\u308b\u67d4\u8edf\u6027\u3082\u6c42\u3081\u3089\u308c\u307e\u3059\u3002\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001\u521d\u5fc3\u8005\u3067\u3082\u7406\u89e3\u3067\u304d\u308b\u57fa\u672c\u304b\u3089\u3001\u4e0a\u7d1a\u8005\u306b\u3082\u5f79\u7acb\u3064\u9ad8\u5ea6\u306a\u30c6\u30af\u30cb\u30c3\u30af\u307e\u3067\u3001PHP\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u3092\u5b8c\u5168\u306b\u30de\u30b9\u30bf\u30fc\u3059\u308b\u305f\u3081\u306e10\u306e\u5fc5\u9808\u30c6\u30af\u30cb\u30c3\u30af\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u306e\u8a18\u4e8b\u3092\u8aad\u3081\u3070\u4ee5\u4e0b\u306e\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u57fa\u672c\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u95a2\u6570\uff08file_get_contents\u3001fopen\u3001readfile\uff09\u3092\u9069\u5207\u306b\u4f7f\u3044\u5206\u3051\u308b<\/li>\n\n\n\n<li>\u69d8\u3005\u306a\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\uff08\u30c6\u30ad\u30b9\u30c8\u3001CSV\u3001JSON\u3001XML\uff09\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406\u3059\u308b<\/li>\n\n\n\n<li>\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u3092\u30e1\u30e2\u30ea\u52b9\u7387\u826f\u304f\u8aad\u307f\u8fbc\u3080<\/li>\n\n\n\n<li>\u5805\u7262\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3092\u5b9f\u88c5\u3059\u308b<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ea\u30b9\u30af\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u305f\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u3092\u884c\u3046<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u9069\u5316\u3059\u308b\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u9069\u7528\u3059\u308b<\/li>\n\n\n\n<li>\u30ea\u30e2\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u5b89\u5168\u306b\u53d6\u5f97\u3059\u308b<\/li>\n\n\n\n<li>\u5b9f\u7528\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u5fdc\u3058\u305f\u6700\u9069\u306a\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3059\u308b<\/li>\n\n\n\n<li>\u4eba\u6c17\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\uff08Laravel\u3001Symfony\uff09\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u3092\u7406\u89e3\u3059\u308b<\/li>\n\n\n\n<li>\u4e00\u822c\u7684\u306a\u30c8\u30e9\u30d6\u30eb\u3092\u8fc5\u901f\u306b\u89e3\u6c7a\u3059\u308b\u65b9\u6cd5\u3092\u7fd2\u5f97\u3059\u308b<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u306e\u5b8c\u5168\u30ac\u30a4\u30c9\u3067\u306f\u3001\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u3068\u5b9f\u8df5\u7684\u306a\u4f8b\u3092\u4ea4\u3048\u306a\u304c\u3089\u3001\u305d\u308c\u305e\u308c\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002\u521d\u5fc3\u8005\u3067\u3082\u7406\u89e3\u3057\u3084\u3059\u3044\u3088\u3046\u6bb5\u968e\u7684\u306b\u8aac\u660e\u3057\u3001\u4e0a\u7d1a\u8005\u306b\u306f\u6df1\u3044\u77e5\u8b58\u3068\u5b9f\u8df5\u7684\u306a\u30d2\u30f3\u30c8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u305d\u308c\u3067\u306f\u3001PHP\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u306e\u4e16\u754c\u3092\u6398\u308a\u4e0b\u3052\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">PHP\u306e\u57fa\u672c\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">file_get_contents()\u95a2\u6570\u3067\u30b7\u30f3\u30d7\u30eb\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080<\/a>      <\/li>      <li>        <a href=\"#i-6\">fopen()\u3001fread()\u3001fclose()\u3092\u4f7f\u3063\u305f\u8aad\u307f\u8fbc\u307f\u51e6\u7406<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-11\">readfile()\u95a2\u6570\u3092\u4f7f\u3063\u305f\u30c0\u30a4\u30ec\u30af\u30c8\u306a\u51fa\u529b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-16\">\u69d8\u3005\u306a\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306e\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-17\">\u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u884c\u5358\u4f4d\u3067\u52b9\u7387\u7684\u306b\u51e6\u7406\u3059\u308b<\/a>      <\/li>      <li>        <a href=\"#i-22\">CSV\u30d5\u30a1\u30a4\u30eb\u3092\u69cb\u9020\u5316\u30c7\u30fc\u30bf\u3068\u3057\u3066\u8aad\u307f\u8fbc\u3080<\/a>      <\/li>      <li>        <a href=\"#i-27\">JSON\u30d5\u30a1\u30a4\u30eb\u304b\u3089PHP\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3078\u306e\u5909\u63db\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-32\">XML\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u6790\u3057\u3066\u5fc5\u8981\u306a\u30c7\u30fc\u30bf\u3092\u62bd\u51fa\u3059\u308b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-37\">\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u306e\u52b9\u7387\u7684\u306a\u8aad\u307f\u8fbc\u307f<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-38\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u6291\u3048\u305f\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u51e6\u7406<\/a>      <\/li>      <li>        <a href=\"#i-42\">\u30b9\u30c8\u30ea\u30fc\u30e0\u3092\u4f7f\u3063\u305f\u52b9\u7387\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-46\">\u5206\u5272\u8aad\u307f\u8fbc\u307f\u3067\u30e1\u30e2\u30ea\u6d88\u8cbb\u3092\u6700\u9069\u5316\u3059\u308b\u5b9f\u88c5\u4f8b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-49\">\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u6642\u306e\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-50\">\u767a\u751f\u3057\u3084\u3059\u3044\u30a8\u30e9\u30fc\u3068\u305d\u306e\u691c\u51fa\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-54\">try-catch\u3092\u4f7f\u3063\u305f\u5805\u7262\u306a\u30a8\u30e9\u30fc\u51e6\u7406\u306e\u5b9f\u88c5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-58\">\u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u78ba\u8a8d\u3068\u6a29\u9650\u30c1\u30a7\u30c3\u30af\u3067\u5148\u56de\u308a\u30a8\u30e9\u30fc\u9632\u6b62<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-62\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-63\">\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306e\u691c\u8a3c\u3068\u6b63\u898f\u5316\u3067\u8106\u5f31\u6027\u3092\u9632\u3050<\/a>      <\/li>      <li>        <a href=\"#i-66\">\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30c8\u30e9\u30d0\u30fc\u30b5\u30eb\u653b\u6483\u304b\u3089\u5b88\u308b\u305f\u3081\u306e\u5bfe\u7b56<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-69\">\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u5b89\u5168\u306a\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-74\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-75\">\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6d3b\u7528\u3057\u305f\u8aad\u307f\u8fbc\u307f\u56de\u6570\u306e\u524a\u6e1b<\/a>      <\/li>      <li>        <a href=\"#i-79\">\u72b6\u6cc1\u306b\u5fdc\u3058\u305f\u6700\u9069\u306a\u8aad\u307f\u8fbc\u307f\u95a2\u6570\u306e\u9078\u629e\u57fa\u6e96<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-83\">\u5b9f\u6e2c\u30c7\u30fc\u30bf\u3067\u898b\u308b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6bd4\u8f03\u3068\u6700\u9069\u5316\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-88\">\u30ea\u30e2\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-89\">URL\u7d4c\u7531\u3067\u30ea\u30e2\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-94\">FTP\u7d4c\u7531\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u3068\u30bb\u30ad\u30e5\u30a2\u901a\u4fe1<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-99\">API\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u51e6\u7406\u3059\u308b\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-104\">\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u5225\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-105\">\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u52b9\u7387\u7684\u306b\u8aad\u307f\u8fbc\u3093\u3067\u7ba1\u7406\u3059\u308b<\/a>      <\/li>      <li>        <a href=\"#i-109\">\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u5206\u6790\u3068\u5b9f\u7528\u7684\u306a\u51e6\u7406\u30d1\u30bf\u30fc\u30f3<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-113\">\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u51e6\u7406\u3092\u5b9f\u88c5\u3059\u308b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-117\">PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-118\">Laravel\u306eStorage\u6a5f\u80fd\u3092\u4f7f\u3063\u305f\u52b9\u7387\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c<\/a>      <\/li>      <li>        <a href=\"#i-124\">Symfony\u306e\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u6d3b\u7528\u3059\u308b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-129\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5171\u901a\u306e\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u30d1\u30bf\u30fc\u30f3\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-134\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u4e00\u822c\u7684\u306a\u554f\u984c\u306e\u89e3\u6c7a\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-135\">\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u95a2\u9023\u306e\u554f\u984c\u3092\u7279\u5b9a\u3057\u3066\u89e3\u6c7a\u3059\u308b<\/a>      <\/li>      <li>        <a href=\"#i-140\">\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u554f\u984c\u306b\u5bfe\u51e6\u3059\u308b\u305f\u3081\u306e\u5b9f\u7528\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-145\">PHP\u306e\u30e1\u30e2\u30ea\u5236\u9650\u3092\u56de\u907f\u3059\u308b\u9ad8\u5ea6\u306a\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-152\">\u307e\u3068\u3081\uff1a\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u30b9\u30ad\u30eb\u306e\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-153\">\u5b66\u3093\u3060\u30c6\u30af\u30cb\u30c3\u30af\u3092\u5b9f\u8df5\u3067\u6d3b\u304b\u3059\u305f\u3081\u306e\u30a2\u30c9\u30d0\u30a4\u30b9<\/a>      <\/li>      <li>        <a href=\"#i-156\">\u3088\u308a\u9ad8\u5ea6\u306a\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u30b9\u30ad\u30eb\u3092\u8eab\u306b\u3064\u3051\u308b\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-159\">\u5b9f\u52d9\u3067\u5dee\u304c\u3064\u304f\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u306e\u30d7\u30ed\u30d5\u30a7\u30c3\u30b7\u30e7\u30ca\u30eb\u6280\u8853<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">PHP\u306e\u57fa\u672c\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5<\/h2>\n\n\n\n<p>PHP\u3067\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u3092\u884c\u3046\u305f\u3081\u306e\u8907\u6570\u306e\u95a2\u6570\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u6700\u9069\u306a\u65b9\u6cd5\u3092\u9078\u3076\u3053\u3068\u304c\u3001\u52b9\u7387\u7684\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306e\u9375\u3068\u306a\u308a\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u6700\u3082\u57fa\u672c\u7684\u3067\u983b\u7e41\u306b\u4f7f\u7528\u3055\u308c\u308b3\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">file_get_contents()\u95a2\u6570\u3067\u30b7\u30f3\u30d7\u30eb\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080<\/h3>\n\n\n\n<p><code>file_get_contents()<\/code>\u306f\u3001PHP\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080\u6700\u3082\u30b7\u30f3\u30d7\u30eb\u306a\u65b9\u6cd5\u3067\u3059\u3002\u3053\u306e\u95a2\u6570\u306f\u6307\u5b9a\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u5168\u4f53\u3092\u4e00\u5ea6\u306b\u6587\u5b57\u5217\u3068\u3057\u3066\u53d6\u5f97\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-2\">\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\n$content = file_get_contents('example.txt');\necho $content; \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092\u305d\u306e\u307e\u307e\u8868\u793a\n\n\/\/ \u5931\u6557\u6642\u306e\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\n$content = file_get_contents('non_existent.txt');\nif ($content === false) {\n    echo \"\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f\";\n}\n\n\/\/ \u30aa\u30d7\u30b7\u30e7\u30f3\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u4f7f\u7528\u3057\u305f\u4f8b\n$content = file_get_contents('large_file.txt', false, null, 0, 1024);\n\/\/ large_file.txt\u306e\u5148\u982d\u304b\u30891024\u30d0\u30a4\u30c8\u3060\u3051\u3092\u8aad\u307f\u8fbc\u3080\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-3\">\u4e3b\u306a\u30d1\u30e9\u30e1\u30fc\u30bf<\/h4>\n\n\n<div id=\"id-e9467138-de6e-4fc9-b0a7-f6111de9cdc2\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d1\u30e9\u30e1\u30fc\u30bf<\/th><th>\u8aac\u660e<\/th><th>\u30c7\u30d5\u30a9\u30eb\u30c8\u5024<\/th><\/tr><\/thead><tbody><tr><td><code>$filename<\/code><\/td><td>\u8aad\u307f\u8fbc\u3080\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\uff08URL\u53ef\uff09<\/td><td>\u5fc5\u9808<\/td><\/tr><tr><td><code>$use_include_path<\/code><\/td><td>\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u30d1\u30b9\u3082\u691c\u7d22\u3059\u308b\u304b\u3069\u3046\u304b<\/td><td><code>false<\/code><\/td><\/tr><tr><td><code>$context<\/code><\/td><td>\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30ea\u30bd\u30fc\u30b9<\/td><td><code>null<\/code><\/td><\/tr><tr><td><code>$offset<\/code><\/td><td>\u8aad\u307f\u8fbc\u307f\u958b\u59cb\u4f4d\u7f6e<\/td><td>0<\/td><\/tr><tr><td><code>$length<\/code><\/td><td>\u8aad\u307f\u8fbc\u3080\u6700\u5927\u30d0\u30a4\u30c8\u6570<\/td><td><code>null<\/code>\uff08\u5168\u3066\uff09<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-4\">\u30e1\u30ea\u30c3\u30c8\u3068\u30c7\u30e1\u30ea\u30c3\u30c8<\/h4>\n\n\n\n<p><strong>\u30e1\u30ea\u30c3\u30c8<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b7\u30f3\u30d7\u30eb\u3067\u4f7f\u3044\u3084\u3059\u3044\uff081\u884c\u3067\u5b9f\u88c5\u53ef\u80fd\uff09<\/li>\n\n\n\n<li>\u5c0f\u301c\u4e2d\u898f\u6a21\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u306b\u6700\u9069<\/li>\n\n\n\n<li>URL\u3082\u6307\u5b9a\u53ef\u80fd\uff08\u30ea\u30e2\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u3082\u53ef\u80fd\uff09<\/li>\n<\/ul>\n\n\n\n<p><strong>\u30c7\u30e1\u30ea\u30c3\u30c8<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30a1\u30a4\u30eb\u5168\u4f53\u3092\u30e1\u30e2\u30ea\u306b\u8aad\u307f\u8fbc\u3080\u305f\u3081\u3001\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u4e0d\u5411\u304d<\/li>\n\n\n\n<li>\u7d30\u304b\u3044\u5236\u5fa1\u304c\u96e3\u3057\u3044<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-5\">\u30d9\u30b9\u30c8\u306a\u4f7f\u7528\u30b7\u30fc\u30f3<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f<\/li>\n\n\n\n<li>\u5c0f\u301c\u4e2d\u898f\u6a21\u306e\u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u51e6\u7406<\/li>\n\n\n\n<li>\u5358\u7d14\u306a\u30d5\u30a1\u30a4\u30eb\u5185\u5bb9\u306e\u53d6\u5f97<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">fopen()\u3001fread()\u3001fclose()\u3092\u4f7f\u3063\u305f\u8aad\u307f\u8fbc\u307f\u51e6\u7406<\/h3>\n\n\n\n<p><code>fopen()<\/code>\u3001<code>fread()<\/code>\u3001<code>fclose()<\/code>\u306e\u7d44\u307f\u5408\u308f\u305b\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u3088\u308a\u7d30\u304b\u3044\u5236\u5fa1\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u30d5\u30a1\u30a4\u30eb\u30dd\u30a4\u30f3\u30bf\u3092\u4f7f\u7528\u3057\u3066\u90e8\u5206\u7684\u306a\u8aad\u307f\u8fbc\u307f\u3084\u51e6\u7406\u304c\u884c\u3048\u308b\u305f\u3081\u3001\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u306e\u51e6\u7406\u306b\u3082\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-7\">\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\n$handle = fopen('example.txt', 'r');\nif ($handle) {\n    $content = fread($handle, filesize('example.txt'));\n    fclose($handle);\n    echo $content;\n}\n\n\/\/ \u30c1\u30e3\u30f3\u30af\u5358\u4f4d\u3067\u306e\u8aad\u307f\u8fbc\u307f\u4f8b\n$handle = fopen('large_file.txt', 'r');\nif ($handle) {\n    $chunk_size = 4096; \/\/ 4KB\u305a\u3064\u8aad\u307f\u8fbc\u3080\n    while (!feof($handle)) {\n        $chunk = fread($handle, $chunk_size);\n        \/\/ $chunk\u3092\u51e6\u7406...\n        echo strlen($chunk) . \" \u30d0\u30a4\u30c8\u8aad\u307f\u8fbc\u307f\u307e\u3057\u305f\\n\";\n    }\n    fclose($handle);\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-8\">\u4e3b\u306a\u95a2\u6570\u3068\u4f7f\u3044\u65b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>fopen()<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u69cb\u6587: <code>fopen(string $filename, string $mode [, bool $use_include_path = false [, resource $context]])<\/code><\/li>\n\n\n\n<li>\u30e2\u30fc\u30c9: \u2018r\u2019\uff08\u8aad\u307f\u8fbc\u307f\uff09\u3001\u2019r+\u2019\uff08\u8aad\u307f\u66f8\u304d\uff09\u3001\u2019w\u2019\uff08\u66f8\u304d\u8fbc\u307f\uff09\u306a\u3069<\/li>\n\n\n\n<li>\u623b\u308a\u5024: \u6210\u529f\u6642\u306f\u30d5\u30a1\u30a4\u30eb\u30dd\u30a4\u30f3\u30bf\u30ea\u30bd\u30fc\u30b9\u3001\u5931\u6557\u6642\u306f<code>false<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>fread()<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u69cb\u6587: <code>fread(resource $handle, int $length)<\/code><\/li>\n\n\n\n<li><code>$length<\/code>: \u8aad\u307f\u8fbc\u3080\u30d0\u30a4\u30c8\u6570<\/li>\n\n\n\n<li>\u623b\u308a\u5024: \u8aad\u307f\u8fbc\u3093\u3060\u30c7\u30fc\u30bf\uff08\u6587\u5b57\u5217\uff09<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>fclose()<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u69cb\u6587: <code>fclose(resource $handle)<\/code><\/li>\n\n\n\n<li>\u623b\u308a\u5024: \u6210\u529f\u6642\u306f<code>true<\/code>\u3001\u5931\u6557\u6642\u306f<code>false<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-9\">\u30e1\u30ea\u30c3\u30c8\u3068\u30c7\u30e1\u30ea\u30c3\u30c8<\/h4>\n\n\n\n<p><strong>\u30e1\u30ea\u30c3\u30c8<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u5236\u5fa1\u3067\u304d\u308b\uff08\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u306b\u6700\u9069\uff09<\/li>\n\n\n\n<li>\u30c1\u30e3\u30f3\u30af\u5358\u4f4d\u3067\u306e\u51e6\u7406\u304c\u53ef\u80fd<\/li>\n\n\n\n<li>\u8aad\u307f\u8fbc\u307f\u3068\u51e6\u7406\u3092\u540c\u6642\u306b\u884c\u3048\u308b<\/li>\n<\/ul>\n\n\n\n<p><strong>\u30c7\u30e1\u30ea\u30c3\u30c8<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u304c\u8907\u96d1\u306b\u306a\u308b<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\uff08fclose\u306e\u5fd8\u308c\uff09\u306b\u6ce8\u610f\u304c\u5fc5\u8981<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u304c\u5fc5\u8981<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-10\">\u30d9\u30b9\u30c8\u306a\u4f7f\u7528\u30b7\u30fc\u30f3<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u306e\u51e6\u7406<\/li>\n\n\n\n<li>\u30b9\u30c8\u30ea\u30fc\u30e0\u51e6\u7406<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u5236\u9650\u304c\u3042\u308b\u74b0\u5883<\/li>\n\n\n\n<li>\u884c\u5358\u4f4d\u3067\u306e\u51e6\u7406\u304c\u5fc5\u8981\u306a\u5834\u5408\uff08fgets\u3068\u7d44\u307f\u5408\u308f\u305b\uff09<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">readfile()\u95a2\u6570\u3092\u4f7f\u3063\u305f\u30c0\u30a4\u30ec\u30af\u30c8\u306a\u51fa\u529b<\/h3>\n\n\n\n<p><code>readfile()<\/code>\u95a2\u6570\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092\u8aad\u307f\u8fbc\u307f\u3001\u76f4\u63a5\u51fa\u529b\u30d0\u30c3\u30d5\u30a1\u306b\u66f8\u304d\u8fbc\u307f\u307e\u3059\u3002\u30d5\u30a1\u30a4\u30eb\u5185\u5bb9\u3092\u305d\u306e\u307e\u307e\u8868\u793a\u3057\u305f\u308a\u3001\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u305b\u305f\u308a\u3059\u308b\u5834\u5408\u306b\u4fbf\u5229\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-12\">\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5 - \u51fa\u529b\u306b\u30d5\u30a1\u30a4\u30eb\u5185\u5bb9\u3092\u9001\u4fe1\n$bytes = readfile('example.txt');\necho \"\u9001\u4fe1\u3055\u308c\u305f\u30d0\u30a4\u30c8\u6570: $bytes\";\n\n\/\/ \u30d5\u30a1\u30a4\u30eb\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306e\u4f8b\nheader('Content-Description: File Transfer');\nheader('Content-Type: application\/octet-stream');\nheader('Content-Disposition: attachment; filename=\"' . basename('download.pdf') . '\"');\nheader('Expires: 0');\nheader('Cache-Control: must-revalidate');\nheader('Pragma: public');\nheader('Content-Length: ' . filesize('download.pdf'));\nreadfile('download.pdf');\nexit;\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-13\">\u4e3b\u306a\u30d1\u30e9\u30e1\u30fc\u30bf<\/h4>\n\n\n<div id=\"id-07cc5e96-b5c1-44c5-a029-cf61458ec33c\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d1\u30e9\u30e1\u30fc\u30bf<\/th><th>\u8aac\u660e<\/th><th>\u30c7\u30d5\u30a9\u30eb\u30c8\u5024<\/th><\/tr><\/thead><tbody><tr><td><code>$filename<\/code><\/td><td>\u8aad\u307f\u8fbc\u3080\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9<\/td><td>\u5fc5\u9808<\/td><\/tr><tr><td><code>$use_include_path<\/code><\/td><td>\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u30d1\u30b9\u3082\u691c\u7d22\u3059\u308b\u304b\u3069\u3046\u304b<\/td><td><code>false<\/code><\/td><\/tr><tr><td><code>$context<\/code><\/td><td>\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30ea\u30bd\u30fc\u30b9<\/td><td><code>null<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-14\">\u30e1\u30ea\u30c3\u30c8\u3068\u30c7\u30e1\u30ea\u30c3\u30c8<\/h4>\n\n\n\n<p><strong>\u30e1\u30ea\u30c3\u30c8<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e1\u30e2\u30ea\u52b9\u7387\u304c\u826f\u3044\uff08\u5185\u90e8\u3067\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u884c\u3046\uff09<\/li>\n\n\n\n<li>\u30b7\u30f3\u30d7\u30eb\u306a\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30d5\u30a1\u30a4\u30eb\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306b\u6700\u9069<\/li>\n<\/ul>\n\n\n\n<p><strong>\u30c7\u30e1\u30ea\u30c3\u30c8<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8aad\u307f\u8fbc\u3093\u3060\u30c7\u30fc\u30bf\u3092\u5909\u6570\u306b\u4fdd\u5b58\u3067\u304d\u306a\u3044<\/li>\n\n\n\n<li>\u51e6\u7406\u3092\u52a0\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u306a\u3044<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u304c\u5c11\u3057\u8907\u96d1<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-15\">\u30d9\u30b9\u30c8\u306a\u4f7f\u7528\u30b7\u30fc\u30f3<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30a1\u30a4\u30eb\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u6a5f\u80fd\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u753b\u50cf\u3084\u52d5\u753b\u306a\u3069\u306e\u30d0\u30a4\u30ca\u30ea\u30d5\u30a1\u30a4\u30eb\u306e\u51fa\u529b<\/li>\n\n\n\n<li>\u30d5\u30a1\u30a4\u30eb\u5185\u5bb9\u3092\u305d\u306e\u307e\u307e\u8868\u793a\u3059\u308b\u5834\u5408<\/li>\n<\/ul>\n\n\n\n<p>\u5404\u95a2\u6570\u306b\u306f\u3001\u305d\u308c\u305e\u308c\u7279\u9577\u3068\u6700\u9069\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u304c\u3042\u308a\u307e\u3059\u3002\u5c0f\u3055\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u5358\u7d14\u306b\u8aad\u307f\u8fbc\u3080\u306a\u3089<code>file_get_contents()<\/code>\u3001\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406\u3059\u308b\u306a\u3089<code>fopen()\/fread()\/fclose()<\/code>\u306e\u7d44\u307f\u5408\u308f\u305b\u3001\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u6a5f\u80fd\u3092\u5b9f\u88c5\u3059\u308b\u306a\u3089<code>readfile()<\/code>\u304c\u9069\u3057\u3066\u3044\u307e\u3059\u3002\u30b1\u30fc\u30b9\u306b\u5fdc\u3058\u3066\u6700\u9069\u306a\u65b9\u6cd5\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-16\">\u69d8\u3005\u306a\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306e\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5<\/h2>\n\n\n\n<p>\u5b9f\u969b\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u3067\u306f\u3001\u5358\u7d14\u306a\u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3060\u3051\u3067\u306a\u304f\u3001CSV\u3001JSON\u3001XML\u306a\u3069\u69d8\u3005\u306a\u5f62\u5f0f\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u6271\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u305d\u308c\u305e\u308c\u306e\u5f62\u5f0f\u306b\u306f\u7279\u6709\u306e\u69cb\u9020\u304c\u3042\u308a\u3001\u6700\u9069\u306a\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5\u3082\u7570\u306a\u308a\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u4ee3\u8868\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306e\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5\u3068\u3001\u305d\u308c\u3089\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406\u3059\u308b\u305f\u3081\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u884c\u5358\u4f4d\u3067\u52b9\u7387\u7684\u306b\u51e6\u7406\u3059\u308b<\/h3>\n\n\n\n<p>\u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u884c\u5358\u4f4d\u3067\u51e6\u7406\u3059\u308b\u5834\u5408\u3001\u3044\u304f\u3064\u304b\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002\u7279\u306b\u5927\u898f\u6a21\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u6271\u3046\u5834\u5408\u306f\u3001\u30e1\u30e2\u30ea\u52b9\u7387\u3092\u8003\u616e\u3057\u305f\u51e6\u7406\u65b9\u6cd5\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-18\">file()\u95a2\u6570\u3092\u4f7f\u3063\u305f\u884c\u5358\u4f4d\u306e\u8aad\u307f\u8fbc\u307f<\/h4>\n\n\n\n<p><code>file()<\/code>\u95a2\u6570\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092\u884c\u5358\u4f4d\u3067\u914d\u5217\u306b\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092\u884c\u5358\u4f4d\u3067\u914d\u5217\u306b\u8aad\u307f\u8fbc\u3080\n$lines = file('log.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);\n\n\/\/ \u5404\u884c\u3092\u51e6\u7406\nforeach ($lines as $lineNumber =&gt; $line) {\n    echo \"\u884c #\" . ($lineNumber + 1) . \": \" . $line . PHP_EOL;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-19\">fgets()\u3092\u4f7f\u3063\u305f\u52b9\u7387\u7684\u306a\u884c\u5358\u4f4d\u51e6\u7406<\/h4>\n\n\n\n<p>\u5927\u898f\u6a21\u30d5\u30a1\u30a4\u30eb\u306e\u5834\u5408\u3001<code>fgets()<\/code>\u30671\u884c\u305a\u3064\u8aad\u307f\u8fbc\u3080\u3053\u3068\u3067\u30e1\u30e2\u30ea\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u30921\u884c\u305a\u3064\u8aad\u307f\u8fbc\u3080\n$handle = fopen('large_log.txt', 'r');\nif ($handle) {\n    $lineNumber = 0;\n    while (($line = fgets($handle)) !== false) {\n        $lineNumber++;\n        \/\/ \u5fc5\u8981\u306a\u30d1\u30bf\u30fc\u30f3\u306e\u884c\u3060\u3051\u51e6\u7406\u3059\u308b\u4f8b\n        if (strpos($line, 'ERROR') !== false) {\n            echo \"\u30a8\u30e9\u30fc\u767a\u898b (\u884c $lineNumber): $line\";\n            \/\/ \u30a8\u30e9\u30fc\u51e6\u7406...\n        }\n    }\n    fclose($handle);\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-20\">SplFileObject\u3092\u4f7f\u3063\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30a2\u30d7\u30ed\u30fc\u30c1<\/h4>\n\n\n\n<p>PHP 5.1.0\u4ee5\u964d\u3067\u306f\u3001<code>SplFileObject<\/code>\u30af\u30e9\u30b9\u3092\u4f7f\u3063\u3066\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ SplFileObject\u3092\u4f7f\u3063\u305f\u884c\u5358\u4f4d\u51e6\u7406\n$file = new SplFileObject('data.txt');\n$file-&gt;setFlags(SplFileObject::DROP_NEW_LINE | SplFileObject::SKIP_EMPTY);\n\nforeach ($file as $lineNumber =&gt; $line) {\n    echo \"\u884c #\" . ($lineNumber + 1) . \": \" . $line . PHP_EOL;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-21\">\u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5c0f\u3055\u306a\u30d5\u30a1\u30a4\u30eb\uff08\u6570MB\u4ee5\u4e0b\uff09\u306a\u3089<code>file()<\/code>\u95a2\u6570\u304c\u4fbf\u5229<\/li>\n\n\n\n<li>\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\uff08\u6570MB\u4ee5\u4e0a\uff09\u306a\u3089<code>fgets()<\/code>\u304b<code>SplFileObject<\/code>\u30671\u884c\u305a\u3064\u51e6\u7406<\/li>\n\n\n\n<li>\u51e6\u7406\u4e2d\u306f\u4e0d\u8981\u306a\u30e1\u30e2\u30ea\u3092\u89e3\u653e\u3057\u3066\u52b9\u7387\u5316\uff08<code>unset()<\/code>\u306e\u6d3b\u7528\uff09<\/li>\n\n\n\n<li>\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u6b63\u898f\u8868\u73fe\u3067\u884c\u5185\u5bb9\u3092\u89e3\u6790<\/li>\n\n\n\n<li>\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u304c\u4e0d\u660e\u306a\u5834\u5408\u306f<code>mb_detect_encoding()<\/code>\u3067\u691c\u51fa<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">CSV\u30d5\u30a1\u30a4\u30eb\u3092\u69cb\u9020\u5316\u30c7\u30fc\u30bf\u3068\u3057\u3066\u8aad\u307f\u8fbc\u3080<\/h3>\n\n\n\n<p>CSV\u30d5\u30a1\u30a4\u30eb\u306f\u8868\u5f62\u5f0f\u306e\u30c7\u30fc\u30bf\u3092\u6271\u3046\u969b\u306b\u3088\u304f\u4f7f\u308f\u308c\u307e\u3059\u3002PHP\u306b\u306f\u3001CSV\u30d5\u30a1\u30a4\u30eb\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406\u3059\u308b\u305f\u3081\u306e\u5c02\u7528\u95a2\u6570\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-23\">fgetcsv()\u3092\u4f7f\u3063\u305f\u8aad\u307f\u8fbc\u307f<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ CSV\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067\u51e6\u7406\n$handle = fopen('users.csv', 'r');\nif ($handle) {\n    \/\/ \u30d8\u30c3\u30c0\u30fc\u884c\u3092\u8aad\u307f\u8fbc\u3080\n    $headers = fgetcsv($handle);\n    \n    \/\/ \u30c7\u30fc\u30bf\u884c\u3092\u51e6\u7406\n    $users = [];\n    while (($data = fgetcsv($handle)) !== false) {\n        \/\/ \u30d8\u30c3\u30c0\u30fc\u3068\u5024\u3092\u5bfe\u5fdc\u4ed8\u3051\u3066\u9023\u60f3\u914d\u5217\u3092\u4f5c\u6210\n        $user = array_combine($headers, $data);\n        $users[] = $user;\n        \n        \/\/ \u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30c7\u30fc\u30bf\u3092\u691c\u8a3c\u30fb\u52a0\u5de5\n        if (!filter_var($user['email'], FILTER_VALIDATE_EMAIL)) {\n            echo \"\u7121\u52b9\u306a\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9: \" . $user['email'] . PHP_EOL;\n        }\n    }\n    fclose($handle);\n}\n\n\/\/ \u51e6\u7406\u7d50\u679c\u3092\u8868\u793a\necho \"\u8aad\u307f\u8fbc\u3093\u3060\u30e6\u30fc\u30b6\u30fc\u6570: \" . count($users) . PHP_EOL;\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-24\">str_getcsv()\u3092\u4f7f\u3063\u305f\u51e6\u7406<\/h4>\n\n\n\n<p>\u65e2\u306b\u30e1\u30e2\u30ea\u4e0a\u306b\u3042\u308bCSV\u6587\u5b57\u5217\u3092\u51e6\u7406\u3059\u308b\u5834\u5408\u306f\u3001<code>str_getcsv()<\/code>\u95a2\u6570\u304c\u4fbf\u5229\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ file_get_contents()\u3068\u7d44\u307f\u5408\u308f\u305b\u305fCSV\u51e6\u7406\n$csv_string = file_get_contents('products.csv');\n$rows = explode(\"\\n\", $csv_string);\n\n$data = [];\nforeach ($rows as $row) {\n    if (trim($row) !== '') {\n        $data[] = str_getcsv($row);\n    }\n}\n\n\/\/ \u6700\u521d\u306e\u884c\u3092\u30d8\u30c3\u30c0\u30fc\u3068\u3057\u3066\u4f7f\u7528\n$headers = array_shift($data);\n\n\/\/ \u9023\u60f3\u914d\u5217\u306b\u5909\u63db\n$products = [];\nforeach ($data as $row) {\n    $products[] = array_combine($headers, $row);\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-25\">CSV\u30c7\u30fc\u30bf\u306e\u691c\u8a3c\u3068\u5909\u63db<\/h4>\n\n\n\n<p>CSV\u304b\u3089\u8aad\u307f\u8fbc\u3093\u3060\u30c7\u30fc\u30bf\u306f\u3001\u591a\u304f\u306e\u5834\u5408\u3001\u578b\u5909\u63db\u3084\u691c\u8a3c\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ CSV\u30c7\u30fc\u30bf\u306e\u691c\u8a3c\u3068\u578b\u5909\u63db\nforeach ($products as &amp;$product) {\n    \/\/ \u6570\u5024\u306b\u5909\u63db\n    $product['price'] = (float)$product['price'];\n    $product['quantity'] = (int)$product['quantity'];\n    \n    \/\/ \u30c7\u30fc\u30bf\u691c\u8a3c\n    if ($product['price'] &lt;= 0) {\n        echo \"\u8b66\u544a: \u5546\u54c1\u300c{$product['name']}\u300d\u306e\u4fa1\u683c\u304c\u7121\u52b9\u3067\u3059\\n\";\n    }\n    \n    \/\/ \u5fc5\u8981\u306b\u5fdc\u3058\u3066\u65e5\u4ed8\u5f62\u5f0f\u3092\u5909\u63db\n    if (isset($product['date'])) {\n        $product['date'] = DateTime::createFromFormat('Y-m-d', $product['date']);\n    }\n}\nunset($product); \/\/ \u53c2\u7167\u3092\u89e3\u9664\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-26\">CSV\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CSV\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u30d8\u30c3\u30c0\u30fc\u884c\u3092\u542b\u3081\u308b\u3088\u3046\u306b\u3059\u308b<\/li>\n\n\n\n<li><code>fgetcsv()<\/code>\u306e\u30c7\u30ea\u30df\u30bf\u3001\u30a8\u30f3\u30af\u30ed\u30fc\u30b8\u30e3\u3001\u30a8\u30b9\u30b1\u30fc\u30d7\u6587\u5b57\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u9069\u5207\u306b\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u8aad\u307f\u8fbc\u3093\u3060\u30c7\u30fc\u30bf\u306f\u9069\u5207\u306b\u578b\u5909\u63db\u3092\u884c\u3046<\/li>\n\n\n\n<li>\u7570\u306a\u308b\u6587\u5b57\u30b3\u30fc\u30c9\u306b\u5bfe\u5fdc\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b<\/li>\n\n\n\n<li>\u4e0d\u6b63\u306a\u30c7\u30fc\u30bf\u306b\u5bfe\u3059\u308b\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3092\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-27\">JSON\u30d5\u30a1\u30a4\u30eb\u304b\u3089PHP\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3078\u306e\u5909\u63db\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>JSON\u306f\u3001Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084API\u3067\u3088\u304f\u4f7f\u308f\u308c\u308b\u30c7\u30fc\u30bf\u5f62\u5f0f\u3067\u3059\u3002PHP\u3067\u306f\u3001JSON\u30c7\u30fc\u30bf\u3068PHP\u306e\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u7c21\u5358\u306b\u76f8\u4e92\u5909\u63db\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-28\">json_decode()\u3092\u4f7f\u3063\u305fJSON\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ JSON\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3093\u3067PHP\u30c7\u30fc\u30bf\u306b\u5909\u63db\n$json_string = file_get_contents('config.json');\n$config = json_decode($json_string, true); \/\/ true\u3092\u6307\u5b9a\u3059\u308b\u3068\u9023\u60f3\u914d\u5217\u3068\u3057\u3066\u5909\u63db\n\n\/\/ \u5909\u63db\u7d50\u679c\u306e\u78ba\u8a8d\nif ($config === null) {\n    echo \"JSON\u306e\u30d1\u30fc\u30b9\u30a8\u30e9\u30fc: \" . json_last_error_msg() . PHP_EOL;\n} else {\n    \/\/ JSON\u30c7\u30fc\u30bf\u306b\u30a2\u30af\u30bb\u30b9\n    echo \"\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u540d: \" . $config['appName'] . PHP_EOL;\n    echo \"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a: \" . print_r($config['database'], true) . PHP_EOL;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-29\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u914d\u5217\u306e\u9078\u629e<\/h4>\n\n\n\n<p><code>json_decode()<\/code>\u306e\u7b2c2\u5f15\u6570\u3067\u3001JSON\u3092\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u3057\u3066\u6271\u3046\u304b\u914d\u5217\u3068\u3057\u3066\u6271\u3046\u304b\u3092\u9078\u629e\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u3057\u3066\u5909\u63db\uff08\u7b2c2\u5f15\u6570\u304cfalse\u307e\u305f\u306f\u7701\u7565\uff09\n$object = json_decode($json_string);\necho $object-&gt;appName; \/\/ \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u8a18\u6cd5\u3067\u30a2\u30af\u30bb\u30b9\n\n\/\/ \u914d\u5217\u3068\u3057\u3066\u5909\u63db\uff08\u7b2c2\u5f15\u6570\u304ctrue\uff09\n$array = json_decode($json_string, true);\necho $array['appName']; \/\/ \u914d\u5217\u8a18\u6cd5\u3067\u30a2\u30af\u30bb\u30b9\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-30\">\u30cd\u30b9\u30c8\u3055\u308c\u305fJSON\u69cb\u9020\u306e\u51e6\u7406<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u8907\u96d1\u306aJSON\u69cb\u9020\u3092\u51e6\u7406\n$complex_json = file_get_contents('nested_data.json');\n$data = json_decode($complex_json, true);\n\n\/\/ \u30cd\u30b9\u30c8\u3055\u308c\u305f\u8981\u7d20\u306b\u30a2\u30af\u30bb\u30b9\nif (isset($data['users']) &amp;&amp; is_array($data['users'])) {\n    foreach ($data['users'] as $user) {\n        echo \"\u30e6\u30fc\u30b6\u30fc: \" . $user['name'] . PHP_EOL;\n        \n        \/\/ \u30a2\u30c9\u30ec\u30b9\u60c5\u5831\u306e\u51e6\u7406\n        if (isset($user['addresses']) &amp;&amp; is_array($user['addresses'])) {\n            foreach ($user['addresses'] as $address) {\n                echo \"  \u4f4f\u6240: \" . $address['street'] . \", \" . \n                     $address['city'] . PHP_EOL;\n            }\n        }\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-31\">JSON\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ JSON\u30d1\u30fc\u30b9\u30a8\u30e9\u30fc\u306e\u9069\u5207\u306a\u51e6\u7406\nfunction decode_json($json_string) {\n    $data = json_decode($json_string, true);\n    \n    $error = json_last_error();\n    if ($error !== JSON_ERROR_NONE) {\n        throw new Exception(\"JSON\u30c7\u30b3\u30fc\u30c9\u30a8\u30e9\u30fc: \" . json_last_error_msg(), $error);\n    }\n    \n    return $data;\n}\n\ntry {\n    $config = decode_json($json_string);\n    \/\/ \u51e6\u7406\u3092\u7d9a\u884c...\n} catch (Exception $e) {\n    echo \"\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage() . PHP_EOL;\n    \/\/ \u30a8\u30e9\u30fc\u30ed\u30b0\u306b\u8a18\u9332\u3059\u308b\u306a\u3069\u306e\u5bfe\u5fdc\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-32\">XML\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u6790\u3057\u3066\u5fc5\u8981\u306a\u30c7\u30fc\u30bf\u3092\u62bd\u51fa\u3059\u308b<\/h3>\n\n\n\n<p>XML\u306f\u69cb\u9020\u5316\u30c7\u30fc\u30bf\u306e\u6a19\u6e96\u5f62\u5f0f\u3068\u3057\u3066\u3001\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3084\u30c7\u30fc\u30bf\u4ea4\u63db\u3067\u5e83\u304f\u4f7f\u308f\u308c\u3066\u3044\u307e\u3059\u3002PHP\u3067\u306f\u3001XML\u3092\u51e6\u7406\u3059\u308b\u305f\u3081\u306e\u8907\u6570\u306e\u624b\u6cd5\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-33\">SimpleXML\u3092\u4f7f\u3063\u305f\u57fa\u672c\u7684\u306a\u8aad\u307f\u8fbc\u307f<\/h4>\n\n\n\n<p><code>SimpleXML<\/code>\u306f\u3001\u30b7\u30f3\u30d7\u30eb\u306aXML\u51e6\u7406\u306b\u9069\u3057\u305fPHP\u306e\u62e1\u5f35\u6a5f\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ XML\u30d5\u30a1\u30a4\u30eb\u3092SimpleXML\u3067\u8aad\u307f\u8fbc\u3080\n$xml = simplexml_load_file('books.xml');\nif ($xml === false) {\n    echo \"XML\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f\" . PHP_EOL;\n    exit;\n}\n\n\/\/ \u8981\u7d20\u306e\u5024\u306b\u30a2\u30af\u30bb\u30b9\necho \"\u30e9\u30a4\u30d6\u30e9\u30ea\u540d: \" . $xml-&gt;name . PHP_EOL;\n\n\/\/ \u5c5e\u6027\u306b\u30a2\u30af\u30bb\u30b9\necho \"\u30d0\u30fc\u30b8\u30e7\u30f3: \" . $xml['version'] . PHP_EOL;\n\n\/\/ \u5b50\u8981\u7d20\u3092\u7e70\u308a\u8fd4\u3057\u51e6\u7406\nforeach ($xml-&gt;book as $book) {\n    echo \"\u66f8\u7c4d: \" . $book-&gt;title . \" (\u8457\u8005: \" . $book-&gt;author . \")\" . PHP_EOL;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-34\">XPath\u3092\u4f7f\u3063\u305f\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u62bd\u51fa<\/h4>\n\n\n\n<p>XPath\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u8907\u96d1\u306aXML\u69cb\u9020\u304b\u3089\u5fc5\u8981\u306a\u90e8\u5206\u3060\u3051\u3092\u52b9\u7387\u7684\u306b\u62bd\u51fa\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ XPath\u3092\u4f7f\u3063\u3066\u7279\u5b9a\u306e\u8981\u7d20\u3092\u691c\u7d22\n$xml = simplexml_load_file('library.xml');\n\n\/\/ \u7279\u5b9a\u306e\u8457\u8005\u306e\u66f8\u7c4d\u3092XPath\u3067\u691c\u7d22\n$books = $xml-&gt;xpath('\/\/book[author=\"\u5c71\u7530\u592a\u90ce\"]');\necho \"\u5c71\u7530\u592a\u90ce\u306e\u8457\u66f8: \" . count($books) . \"\u518a\\n\";\nforeach ($books as $book) {\n    echo \"- \" . $book-&gt;title . \" (\" . $book-&gt;year . \"\u5e74)\\n\";\n}\n\n\/\/ \u5c5e\u6027\u306b\u3088\u308b\u691c\u7d22\n$technical_books = $xml-&gt;xpath('\/\/book[@category=\"technical\"]');\necho \"\u6280\u8853\u66f8: \" . count($technical_books) . \"\u518a\\n\";\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-35\">DOM\u3092\u4f7f\u3063\u305f\u9ad8\u5ea6\u306aXML\u64cd\u4f5c<\/h4>\n\n\n\n<p>\u3088\u308a\u8907\u96d1\u306aXML\u64cd\u4f5c\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001DOM\u62e1\u5f35\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ DOM\u3092\u4f7f\u3063\u305fXML\u51e6\u7406\n$dom = new DOMDocument();\n$dom-&gt;load('complex.xml');\n\n\/\/ \u8981\u7d20\u3092\u691c\u7d22\n$elements = $dom-&gt;getElementsByTagName('item');\nforeach ($elements as $element) {\n    echo \"\u30a2\u30a4\u30c6\u30e0ID: \" . $element-&gt;getAttribute('id') . PHP_EOL;\n    \n    \/\/ \u5b50\u8981\u7d20\u306e\u53d6\u5f97\n    $nameNode = $element-&gt;getElementsByTagName('name')-&gt;item(0);\n    if ($nameNode !== null) {\n        echo \"\u540d\u524d: \" . $nameNode-&gt;nodeValue . PHP_EOL;\n    }\n}\n\n\/\/ XPath\u3092\u4f7f\u3063\u305fDOM\u51e6\u7406\n$xpath = new DOMXPath($dom);\n$nodes = $xpath-&gt;query('\/\/item[status=\"active\"]');\necho \"\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u30a2\u30a4\u30c6\u30e0: \" . $nodes-&gt;length . \"\u500b\\n\";\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-36\">XMLReader: \u5927\u898f\u6a21XML\u30d5\u30a1\u30a4\u30eb\u306e\u51e6\u7406<\/h4>\n\n\n\n<p>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u6291\u3048\u3066\u5927\u304d\u306aXML\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3059\u308b\u306b\u306f\u3001<code>XMLReader<\/code>\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ XMLReader\u3092\u4f7f\u3063\u305f\u5927\u898f\u6a21XML\u30d5\u30a1\u30a4\u30eb\u306e\u51e6\u7406\n$reader = new XMLReader();\n$reader-&gt;open('large.xml');\n\n\/\/ \u7279\u5b9a\u306e\u8981\u7d20\u3092\u691c\u7d22\u3057\u306a\u304c\u3089\u8aad\u307f\u8fbc\u307f\nwhile ($reader-&gt;read()) {\n    if ($reader-&gt;nodeType === XMLReader::ELEMENT &amp;&amp; $reader-&gt;name === 'product') {\n        \/\/ \u73fe\u5728\u306e\u8981\u7d20\u3092SimpleXML\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u3057\u3066\u53d6\u5f97\n        $node = new SimpleXMLElement($reader-&gt;readOuterXml());\n        \n        \/\/ \u5fc5\u8981\u306a\u30c7\u30fc\u30bf\u3092\u51e6\u7406\n        echo \"\u5546\u54c1: \" . $node-&gt;name . \" (\u00a5\" . $node-&gt;price . \")\\n\";\n        \n        \/\/ \u30e1\u30e2\u30ea\u3092\u89e3\u653e\n        unset($node);\n    }\n}\n$reader-&gt;close();\n<\/pre>\n\n\n\n<p>\u5404\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306b\u306f\u3001\u305d\u308c\u305e\u308c\u306b\u9069\u3057\u305f\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002\u5f62\u5f0f\u306e\u7279\u6027\u3092\u7406\u89e3\u3057\u3001\u9069\u5207\u306a\u95a2\u6570\u3084\u30af\u30e9\u30b9\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u7279\u306b\u5927\u898f\u6a21\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u6271\u3046\u5834\u5408\u306f\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u51e6\u7406\u65b9\u6cd5\u3092\u9078\u3076\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-37\">\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u306e\u52b9\u7387\u7684\u306a\u8aad\u307f\u8fbc\u307f<\/h2>\n\n\n\n<p>\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u3084CSV\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u306a\u3069\u3001\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\uff08\u6570\u5341MB\u301c\u6570GB\uff09\u306e\u51e6\u7406\u306f\u3001\u7279\u306b\u30e1\u30e2\u30ea\u5236\u9650\u306e\u3042\u308b\u5171\u6709\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u74b0\u5883\u3067\u306f\u8ab2\u984c\u3068\u306a\u308a\u307e\u3059\u3002PHP\u306b\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u5236\u9650\uff08memory_limit\uff09\u304c\u3042\u308a\u3001\u3053\u306e\u5236\u9650\u3092\u8d85\u3048\u308b\u3068\u300cAllowed memory size of X bytes exhausted\u300d\u3068\u3044\u3063\u305f\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406\u3059\u308b\u305f\u3081\u306e3\u3064\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-38\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u6291\u3048\u305f\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u51e6\u7406<\/h3>\n\n\n\n<p>\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3059\u308b\u969b\u306b\u306f\u3001\u4e00\u5ea6\u306b\u30d5\u30a1\u30a4\u30eb\u5168\u4f53\u3092\u30e1\u30e2\u30ea\u306b\u8aad\u307f\u8fbc\u3080\u306e\u3067\u306f\u306a\u304f\u30011\u884c\u307e\u305f\u306f\u4e00\u5b9a\u91cf\u305a\u3064\u51e6\u7406\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-39\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6e2c\u5b9a<\/h4>\n\n\n\n<p>\u307e\u305a\u306f\u3001\u51e6\u7406\u4e2d\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u6e2c\u5b9a\u3059\u308b\u65b9\u6cd5\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u73fe\u5728\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u8868\u793a\necho \"\u73fe\u5728\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf: \" . memory_get_usage() \/ 1024 \/ 1024 . \" MB\\n\";\n\n\/\/ \u30d4\u30fc\u30af\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u8868\u793a\necho \"\u30d4\u30fc\u30af\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf: \" . memory_get_peak_usage() \/ 1024 \/ 1024 . \" MB\\n\";\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-40\">1\u884c\u305a\u3064\u51e6\u7406\u3059\u308b\u65b9\u6cd5<\/h4>\n\n\n\n<p>\u5927\u5bb9\u91cf\u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u884c\u5358\u4f4d\u3067\u51e6\u7406\u3059\u308b\u65b9\u6cd5\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u60aa\u3044\u4f8b\uff1afile_get_contents\u3067\u30d5\u30a1\u30a4\u30eb\u5168\u4f53\u3092\u8aad\u307f\u8fbc\u3080\n\/\/ $content = file_get_contents('large_log.txt'); \/\/ \u30e1\u30e2\u30ea\u4e0d\u8db3\u306b\u306a\u308b\u53ef\u80fd\u6027\u3042\u308a\n\n\/\/ \u826f\u3044\u4f8b\uff1afgets\u30671\u884c\u305a\u3064\u51e6\u7406\n$handle = fopen('large_log.txt', 'r');\nif ($handle) {\n    $count = 0;\n    $startTime = microtime(true);\n    \n    while (($line = fgets($handle)) !== false) {\n        \/\/ \u5404\u884c\u3092\u51e6\u7406\n        $count++;\n        \n        \/\/ \u4f8b\uff1a\u7279\u5b9a\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u691c\u7d22\n        if (strpos($line, 'ERROR') !== false) {\n            \/\/ \u30a8\u30e9\u30fc\u884c\u306e\u51e6\u7406...\n        }\n        \n        \/\/ \u9032\u6357\u8868\u793a\uff0810\u4e07\u884c\u3054\u3068\uff09\n        if ($count % 100000 === 0) {\n            echo \"\u51e6\u7406\u884c\u6570: $count, \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf: \" . \n                 round(memory_get_usage() \/ 1024 \/ 1024, 2) . \" MB\\n\";\n        }\n    }\n    \n    $endTime = microtime(true);\n    echo \"\u5408\u8a08 $count \u884c\u3092\u51e6\u7406\u3057\u307e\u3057\u305f\uff08\u6240\u8981\u6642\u9593: \" . \n         round($endTime - $startTime, 2) . \" \u79d2\uff09\\n\";\n    \n    fclose($handle);\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-41\">\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u9632\u6b62<\/h4>\n\n\n\n<p>\u9577\u6642\u9593\u5b9f\u884c\u3055\u308c\u308b\u51e6\u7406\u3067\u306f\u3001\u4e0d\u8981\u306b\u306a\u3063\u305f\u5909\u6570\u3092\u3053\u307e\u3081\u306b\u89e3\u653e\u3059\u308b\u3053\u3068\u3067\u3001\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u9632\u3050\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5927\u304d\u306a\u914d\u5217\u3092\u4f7f\u7528\n$bigArray = [];\nfor ($i = 0; $i &lt; 100000; $i++) {\n    $bigArray[] = str_repeat('x', 100); \/\/ \u5404\u8981\u7d20\u304c\u7d04100\u30d0\u30a4\u30c8\n}\necho \"\u914d\u5217\u4f5c\u6210\u5f8c: \" . memory_get_usage() \/ 1024 \/ 1024 . \" MB\\n\";\n\n\/\/ \u5909\u6570\u306e\u89e3\u653e\nunset($bigArray);\necho \"\u5909\u6570\u89e3\u653e\u5f8c: \" . memory_get_usage() \/ 1024 \/ 1024 . \" MB\\n\";\n\n\/\/ \u30ac\u30d9\u30fc\u30b8\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3092\u5f37\u5236\u7684\u306b\u5b9f\u884c\ngc_collect_cycles();\necho \"GC\u5b9f\u884c\u5f8c: \" . memory_get_usage() \/ 1024 \/ 1024 . \" MB\\n\";\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-42\">\u30b9\u30c8\u30ea\u30fc\u30e0\u3092\u4f7f\u3063\u305f\u52b9\u7387\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f<\/h3>\n\n\n\n<p>PHP\u306e\u30b9\u30c8\u30ea\u30fc\u30e0\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u69d8\u3005\u306a\u30d7\u30ed\u30c8\u30b3\u30eb\u3084\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u3092\u7d71\u4e00\u7684\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u6271\u3048\u307e\u3059\u3002\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u306e\u51e6\u7406\u306b\u3082\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-43\">\u30b9\u30c8\u30ea\u30fc\u30e0\u30e9\u30c3\u30d1\u30fc\u306e\u6d3b\u7528<\/h4>\n\n\n\n<p>PHP\u3067\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306e\u524d\u306b\u300c\u30b9\u30ad\u30fc\u30e0\u300d\u3068\u547c\u3070\u308c\u308b\u63a5\u982d\u8f9e\u3092\u4ed8\u3051\u308b\u3053\u3068\u3067\u3001\u69d8\u3005\u306a\u30b9\u30c8\u30ea\u30fc\u30e0\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30e1\u30e2\u30ea\u30b9\u30c8\u30ea\u30fc\u30e0\u306e\u4f7f\u7528\u4f8b\n$memoryStream = fopen('php:\/\/memory', 'w+');\nfwrite($memoryStream, \"\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\\n\");\nfseek($memoryStream, 0); \/\/ \u30dd\u30a4\u30f3\u30bf\u3092\u5148\u982d\u306b\u623b\u3059\necho fread($memoryStream, 1024); \/\/ \"\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\"\nfclose($memoryStream);\n\n\/\/ \u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u30b9\u30c8\u30ea\u30fc\u30e0\u306e\u4f7f\u7528\u4f8b\n$tempStream = fopen('php:\/\/temp', 'w+');\n\/\/ php:\/\/temp \u306f\u5c0f\u3055\u3044\u30c7\u30fc\u30bf\u306a\u3089\u30e1\u30e2\u30ea\u306b\u3001\u5927\u304d\u3044\u30c7\u30fc\u30bf\u306a\u3089\u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u306b\u81ea\u52d5\u7684\u306b\u66f8\u304d\u8fbc\u3080\nfwrite($tempStream, str_repeat('x', 1024 * 1024)); \/\/ 1MB\u306e\u30c7\u30fc\u30bf\nfclose($tempStream);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-44\">\u30b9\u30c8\u30ea\u30fc\u30e0\u30d5\u30a3\u30eb\u30bf\u3092\u4f7f\u3063\u305f\u5909\u63db\u51e6\u7406<\/h4>\n\n\n\n<p>\u30b9\u30c8\u30ea\u30fc\u30e0\u30d5\u30a3\u30eb\u30bf\u3092\u4f7f\u3046\u3068\u3001\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u66f8\u304d\u6642\u306b\u81ea\u52d5\u7684\u306b\u5909\u63db\u51e6\u7406\u3092\u9069\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Base64\u30a8\u30f3\u30b3\u30fc\u30c9\u30d5\u30a3\u30eb\u30bf\u306e\u4f8b\n$handle = fopen('large_binary.dat', 'r');\nstream_filter_append($handle, 'convert.base64-encode');\n\n\/\/ \u51fa\u529b\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u3080\n$output = fopen('encoded.txt', 'w');\nstream_copy_to_stream($handle, $output);\n\nfclose($handle);\nfclose($output);\n\n\/\/ \u5727\u7e2e\u30d5\u30a3\u30eb\u30bf\u306e\u4f8b\uff08zlib\u62e1\u5f35\u304c\u5fc5\u8981\uff09\n$input = fopen('large_text.txt', 'r');\n$output = fopen('compressed.gz', 'w');\nstream_filter_append($output, 'zlib.deflate', STREAM_FILTER_WRITE);\nstream_copy_to_stream($input, $output);\nfclose($input);\nfclose($output);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-45\">\u30ab\u30b9\u30bf\u30e0\u30b9\u30c8\u30ea\u30fc\u30e0\u30d5\u30a3\u30eb\u30bf\u306e\u4f5c\u6210<\/h4>\n\n\n\n<p>\u7279\u6b8a\u306a\u5909\u63db\u51e6\u7406\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u30ab\u30b9\u30bf\u30e0\u30b9\u30c8\u30ea\u30fc\u30e0\u30d5\u30a3\u30eb\u30bf\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ab\u30b9\u30bf\u30e0\u30b9\u30c8\u30ea\u30fc\u30e0\u30d5\u30a3\u30eb\u30bf\u306e\u4f8b\nclass CSVLineNumberFilter extends php_user_filter\n{\n    private $lineNumber = 0;\n    \n    public function filter($in, $out, &amp;$consumed, $closing)\n    {\n        while ($bucket = stream_bucket_make_writeable($in)) {\n            \/\/ \u5404\u884c\u306e\u5148\u982d\u306b\u884c\u756a\u53f7\u3092\u8ffd\u52a0\n            $lines = explode(\"\\n\", $bucket-&gt;data);\n            $newData = '';\n            \n            foreach ($lines as $line) {\n                if (!empty($line)) {\n                    $this-&gt;lineNumber++;\n                    $newData .= \"{$this-&gt;lineNumber},\" . $line . \"\\n\";\n                }\n            }\n            \n            $bucket-&gt;data = $newData;\n            $consumed += $bucket-&gt;datalen;\n            stream_bucket_append($out, $bucket);\n        }\n        return PSFS_PASS_ON;\n    }\n}\n\n\/\/ \u30d5\u30a3\u30eb\u30bf\u3092\u767b\u9332\nstream_filter_register('linenumber', 'CSVLineNumberFilter');\n\n\/\/ \u30d5\u30a3\u30eb\u30bf\u3092\u4f7f\u7528\n$input = fopen('data.csv', 'r');\n$output = fopen('numbered.csv', 'w');\nstream_filter_append($input, 'linenumber');\nstream_copy_to_stream($input, $output);\nfclose($input);\nfclose($output);\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-46\">\u5206\u5272\u8aad\u307f\u8fbc\u307f\u3067\u30e1\u30e2\u30ea\u6d88\u8cbb\u3092\u6700\u9069\u5316\u3059\u308b\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<p>\u975e\u5e38\u306b\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3059\u308b\u5834\u5408\u3001\u4e00\u5b9a\u30b5\u30a4\u30ba\u306e\u30c1\u30e3\u30f3\u30af\uff08\u584a\uff09\u5358\u4f4d\u3067\u8aad\u307f\u8fbc\u3080\u65b9\u6cd5\u304c\u52b9\u679c\u7684\u3067\u3059\u3002\u7279\u306b\u3001\u884c\u306e\u533a\u5207\u308a\u3092\u610f\u8b58\u305b\u305a\u306b\u30d0\u30a4\u30ca\u30ea\u30c7\u30fc\u30bf\u3068\u3057\u3066\u51e6\u7406\u3059\u308b\u5834\u5408\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-47\">\u30c1\u30e3\u30f3\u30af\u5358\u4f4d\u3067\u306e\u8aad\u307f\u8fbc\u307f<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c1\u30e3\u30f3\u30af\u5358\u4f4d\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080\nfunction processLargeFile($filename, $callback, $chunkSize = 1024 * 1024) {\n    $handle = fopen($filename, 'r');\n    if ($handle === false) {\n        return false;\n    }\n    \n    $processedBytes = 0;\n    $fileSize = filesize($filename);\n    $startTime = microtime(true);\n    \n    while (!feof($handle)) {\n        $chunk = fread($handle, $chunkSize);\n        $processedBytes += strlen($chunk);\n        \n        \/\/ \u30c1\u30e3\u30f3\u30af\u3092\u51e6\u7406\u3059\u308b\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\u3092\u547c\u3073\u51fa\u3059\n        $callback($chunk, $processedBytes, $fileSize);\n        \n        \/\/ \u9032\u6357\u8868\u793a\n        $percent = round(($processedBytes \/ $fileSize) * 100, 2);\n        $elapsedTime = microtime(true) - $startTime;\n        $rate = $processedBytes \/ ($elapsedTime ?: 1) \/ 1024 \/ 1024;\n        \n        echo \"\u51e6\u7406: $percent% \u5b8c\u4e86 ($processedBytes \/ $fileSize \u30d0\u30a4\u30c8), \" .\n             \"\u901f\u5ea6: \" . round($rate, 2) . \" MB\/\u79d2\\r\";\n    }\n    \n    echo \"\\n\u51e6\u7406\u5b8c\u4e86: $processedBytes \u30d0\u30a4\u30c8, \u6240\u8981\u6642\u9593: \" . \n         round(microtime(true) - $startTime, 2) . \" \u79d2\\n\";\n    \n    fclose($handle);\n    return true;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\uff1a\u30d5\u30a1\u30a4\u30eb\u5185\u306e\u7279\u5b9a\u306e\u30d0\u30a4\u30c8\u30d1\u30bf\u30fc\u30f3\u3092\u691c\u7d22\n$pattern = pack('H*', 'FFD8FF'); \/\/ JPEG\u753b\u50cf\u306e\u30d8\u30c3\u30c0\u30fc\n$found = 0;\n\nprocessLargeFile('large_binary.dat', function($chunk, $processed, $total) use (&amp;$found, $pattern) {\n    \/\/ \u30c1\u30e3\u30f3\u30af\u5185\u3067\u30d1\u30bf\u30fc\u30f3\u3092\u691c\u7d22\n    $offset = 0;\n    while (($pos = strpos($chunk, $pattern, $offset)) !== false) {\n        $found++;\n        $absolutePos = $processed - strlen($chunk) + $pos;\n        echo \"\u30d1\u30bf\u30fc\u30f3\u767a\u898b: \u4f4d\u7f6e $absolutePos\\n\";\n        $offset = $pos + 1;\n    }\n});\n\necho \"\u5408\u8a08 $found \u500b\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u767a\u898b\\n\";\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-48\">\u4e26\u884c\u51e6\u7406\u3068\u306e\u7d44\u307f\u5408\u308f\u305b<\/h4>\n\n\n\n<p>\u975e\u5e38\u306b\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u306e\u5834\u5408\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u5206\u5272\u3057\u3066\u4e26\u884c\u51e6\u7406\u3059\u308b\u3053\u3068\u3067\u3001\u3055\u3089\u306b\u51e6\u7406\u901f\u5ea6\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d5\u30a1\u30a4\u30eb\u3092\u5206\u5272\u3057\u3066\u51e6\u7406\u3059\u308b\u4f8b\uff08\u7591\u4f3c\u30b3\u30fc\u30c9\uff09\nfunction splitAndProcess($filename, $parts = 4) {\n    $fileSize = filesize($filename);\n    $partSize = ceil($fileSize \/ $parts);\n    \n    echo \"\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba: $fileSize \u30d0\u30a4\u30c8, $parts \u5206\u5272\u51e6\u7406\\n\";\n    \n    \/\/ \u5404\u90e8\u5206\u306e\u958b\u59cb\u30fb\u7d42\u4e86\u4f4d\u7f6e\u3092\u8a08\u7b97\n    $ranges = [];\n    for ($i = 0; $i &lt; $parts; $i++) {\n        $start = $i * $partSize;\n        $end = min(($i + 1) * $partSize - 1, $fileSize - 1);\n        $ranges[] = [$start, $end];\n    }\n    \n    \/\/ \u5404\u90e8\u5206\u3092\u51e6\u7406\uff08\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u30de\u30eb\u30c1\u30d7\u30ed\u30bb\u30b9\u3084\u30ad\u30e5\u30fc\u3092\u4f7f\u7528\uff09\n    foreach ($ranges as $i =&gt; $range) {\n        list($start, $end) = $range;\n        echo \"\u90e8\u5206 \" . ($i + 1) . \": $start \u304b\u3089 $end \u307e\u3067\u51e6\u7406\u4e2d...\\n\";\n        \n        \/\/ \u3053\u306e\u90e8\u5206\u3092\u5225\u30d7\u30ed\u30bb\u30b9\u3067\u51e6\u7406\u3059\u308b\u306a\u3069\n        processFileRange($filename, $start, $end);\n    }\n}\n\n\/\/ \u5b9f\u969b\u306e\u74b0\u5883\u3067\u306f\u3001pcntl_fork()\u3084Gearman\u306a\u3069\u3092\u4f7f\u7528\u3057\u3066\u4e26\u5217\u51e6\u7406\u3092\u5b9f\u88c5\n<\/pre>\n\n\n\n<p>\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u30dd\u30a4\u30f3\u30c8\u3092\u62bc\u3055\u3048\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u610f\u8b58\u3059\u308b<\/strong>: \u4e00\u5ea6\u306b\u5168\u3066\u3092\u8aad\u307f\u8fbc\u307e\u305a\u3001\u90e8\u5206\u7684\u306b\u51e6\u7406\u3059\u308b<\/li>\n\n\n\n<li><strong>\u9032\u6357\u72b6\u6cc1\u3092\u8868\u793a\u3059\u308b<\/strong>: \u7279\u306b\u9577\u6642\u9593\u5b9f\u884c\u3055\u308c\u308b\u51e6\u7406\u3067\u306f\u91cd\u8981<\/li>\n\n\n\n<li><strong>\u4e0d\u8981\u306a\u5909\u6570\u3092\u89e3\u653e\u3059\u308b<\/strong>: <code>unset()<\/code>\u3092\u4f7f\u3063\u3066\u5927\u304d\u306a\u5909\u6570\u3092\u89e3\u653e\u3059\u308b<\/li>\n\n\n\n<li><strong>\u9069\u5207\u306a\u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba\u3092\u9078\u3076<\/strong>: \u5c0f\u3055\u3059\u304e\u308b\u3068\u51e6\u7406\u304c\u9045\u304f\u306a\u308a\u3001\u5927\u304d\u3059\u304e\u308b\u3068\u30e1\u30e2\u30ea\u3092\u6d88\u8cbb\u3059\u308b<\/li>\n\n\n\n<li><strong>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3092\u5b9f\u88c5\u3059\u308b<\/strong>: \u9014\u4e2d\u3067\u7570\u5e38\u7d42\u4e86\u3057\u3066\u3082\u518d\u958b\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b<\/li>\n<\/ol>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001PHP\u306e\u5236\u9650\u5185\u3067\u52b9\u7387\u7684\u306b\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-49\">\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u6642\u306e\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/h2>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u3068\u3063\u3066\u5916\u90e8\u30ea\u30bd\u30fc\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u69d8\u3005\u306a\u8981\u56e0\u3067\u5931\u6557\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u3001\u9069\u5207\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u304c\u5fc5\u9808\u3067\u3059\u3002\u30a8\u30e9\u30fc\u3092\u9069\u5207\u306b\u51e6\u7406\u3057\u306a\u3044\u3068\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30af\u30e9\u30c3\u30b7\u30e5\u3084\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u554f\u984c\u306b\u3064\u306a\u304c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u6642\u306b\u767a\u751f\u3057\u3084\u3059\u3044\u30a8\u30e9\u30fc\u3068\u305d\u306e\u5bfe\u51e6\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-50\">\u767a\u751f\u3057\u3084\u3059\u3044\u30a8\u30e9\u30fc\u3068\u305d\u306e\u691c\u51fa\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u6642\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30a8\u30e9\u30fc\u304c\u983b\u7e41\u306b\u767a\u751f\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-51\">\u4e3b\u306a\u30a8\u30e9\u30fc\u306e\u7a2e\u985e\u3068\u539f\u56e0<\/h4>\n\n\n<div id=\"id-fb173a7f-432e-4c48-b8bf-552312b04959\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a8\u30e9\u30fc\u306e\u7a2e\u985e<\/th><th>\u767a\u751f\u539f\u56e0<\/th><th>PHP\u306e\u30a8\u30e9\u30fc\u30ec\u30d9\u30eb<\/th><\/tr><\/thead><tbody><tr><td>\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u306a\u3044<\/td><td>\u30d1\u30b9\u306e\u9593\u9055\u3044\u3001\u30d5\u30a1\u30a4\u30eb\u306e\u524a\u9664<\/td><td>E_WARNING<\/td><\/tr><tr><td>\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u4e0d\u8db3<\/td><td>\u30d5\u30a1\u30a4\u30eb\u3084\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u8a2d\u5b9a<\/td><td>E_WARNING<\/td><\/tr><tr><td>\u30c7\u30a3\u30b9\u30af\u5bb9\u91cf\u4e0d\u8db3<\/td><td>\u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u4f5c\u6210\u6642\u306e\u30c7\u30a3\u30b9\u30af\u5bb9\u91cf\u4e0d\u8db3<\/td><td>E_WARNING<\/td><\/tr><tr><td>\u30d5\u30a1\u30a4\u30eb\u30ed\u30c3\u30af<\/td><td>\u4ed6\u306e\u30d7\u30ed\u30bb\u30b9\u306b\u3088\u308b\u30d5\u30a1\u30a4\u30eb\u30ed\u30c3\u30af<\/td><td>\u30a8\u30e9\u30fc\u30b9\u30c6\u30fc\u30bf\u30b9<\/td><\/tr><tr><td>\u7121\u52b9\u306a\u30d1\u30b9<\/td><td>\u30d1\u30b9\u69cb\u6587\u306e\u8aa4\u308a\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30c8\u30e9\u30d0\u30fc\u30b5\u30eb<\/td><td>E_WARNING<\/td><\/tr><tr><td>\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u554f\u984c<\/td><td>\u6587\u5b57\u30b3\u30fc\u30c9\u306e\u4e0d\u4e00\u81f4<\/td><td>\u30a8\u30e9\u30fc\u306a\u3057\uff08\u30c7\u30fc\u30bf\u7834\u640d\uff09<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-52\">\u30a8\u30e9\u30fc\u306e\u691c\u51fa\u65b9\u6cd5<\/h4>\n\n\n\n<p>PHP\u306e\u30d5\u30a1\u30a4\u30eb\u95a2\u6570\u306f\u3001\u30a8\u30e9\u30fc\u6642\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u52d5\u4f5c\u3092\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ file_get_contents()\u306e\u30a8\u30e9\u30fc\u691c\u51fa\n$content = @file_get_contents('non_existent.txt');\nif ($content === false) {\n    echo \"\u30a8\u30e9\u30fc: \" . error_get_last()['message'] . PHP_EOL;\n}\n\n\/\/ fopen()\u306e\u30a8\u30e9\u30fc\u691c\u51fa\n$handle = @fopen('inaccessible.txt', 'r');\nif ($handle === false) {\n    echo \"\u30a8\u30e9\u30fc: \" . error_get_last()['message'] . PHP_EOL;\n}\n\n\/\/ \u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u95a2\u6570\u306e\u623b\u308a\u5024\u3092\u30c1\u30a7\u30c3\u30af\nif (!file_put_contents('logs\/app.log', '\u30ed\u30b0\u30e1\u30c3\u30bb\u30fc\u30b8')) {\n    echo \"\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u66f8\u304d\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f\" . PHP_EOL;\n}\n<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\u6ce8\u610f<\/strong>: <code>@<\/code>\u6f14\u7b97\u5b50\uff08\u30a8\u30e9\u30fc\u6291\u5236\u6f14\u7b97\u5b50\uff09\u306e\u4f7f\u7528\u306f\u4e00\u822c\u7684\u306b\u63a8\u5968\u3055\u308c\u307e\u305b\u3093\u304c\u3001\u3053\u3053\u3067\u306f\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002\u5b9f\u969b\u306e\u30b3\u30fc\u30c9\u3067\u306f\u4f8b\u5916\u51e6\u7406\u3092\u4f7f\u3046\u3079\u304d\u3067\u3059\u3002<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-53\">\u30a8\u30e9\u30fc\u30ec\u30d9\u30eb\u3068\u8a2d\u5b9a<\/h4>\n\n\n\n<p>PHP\u306e\u30a8\u30e9\u30fc\u8a2d\u5b9a\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u306e\u30a8\u30e9\u30fc\u8868\u793a\u306b\u5f71\u97ff\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u958b\u767a\u74b0\u5883\u3067\u306f\u5168\u3066\u306e\u30a8\u30e9\u30fc\u3092\u8868\u793a\nini_set('display_errors', 1);\nini_set('display_startup_errors', 1);\nerror_reporting(E_ALL);\n\n\/\/ \u672c\u756a\u74b0\u5883\u3067\u306f\u30a8\u30e9\u30fc\u3092\u30ed\u30b0\u306b\u8a18\u9332\u3057\u3001\u753b\u9762\u306b\u306f\u8868\u793a\u3057\u306a\u3044\nini_set('display_errors', 0);\nini_set('log_errors', 1);\nini_set('error_log', '\/path\/to\/error.log');\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-54\">try-catch\u3092\u4f7f\u3063\u305f\u5805\u7262\u306a\u30a8\u30e9\u30fc\u51e6\u7406\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p>PHP 7\u4ee5\u964d\u3067\u306f\u3001\u307b\u3068\u3093\u3069\u306e\u30a8\u30e9\u30fc\u304c\u4f8b\u5916\u3068\u3057\u3066\u30ad\u30e3\u30c3\u30c1\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u3088\u308a\u30af\u30ea\u30fc\u30f3\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-55\">\u57fa\u672c\u7684\u306a\u4f8b\u5916\u51e6\u7406<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u7684\u306atry-catch\ntry {\n    $content = file_get_contents('config.json');\n    $config = json_decode($content, true);\n    if (json_last_error() !== JSON_ERROR_NONE) {\n        throw new Exception('JSON\u306e\u89e3\u6790\u306b\u5931\u6557\u3057\u307e\u3057\u305f: ' . json_last_error_msg());\n    }\n} catch (Exception $e) {\n    \/\/ \u30a8\u30e9\u30fc\u51e6\u7406\n    echo \"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: \" . $e-&gt;getMessage() . PHP_EOL;\n    \/\/ \u30ed\u30b0\u306b\u8a18\u9332\n    error_log(\"\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage());\n    \/\/ \u4ee3\u66ff\u51e6\u7406\n    $config = getDefaultConfig();\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-56\">\u30ab\u30b9\u30bf\u30e0\u4f8b\u5916\u30af\u30e9\u30b9\u306e\u4f5c\u6210<\/h4>\n\n\n\n<p>\u3088\u308a\u8a73\u7d30\u306a\u30a8\u30e9\u30fc\u51e6\u7406\u306e\u305f\u3081\u306b\u3001\u30ab\u30b9\u30bf\u30e0\u4f8b\u5916\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3059\u308b\u306e\u304c\u52b9\u679c\u7684\u3067\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u5c02\u7528\u306e\u4f8b\u5916\u30af\u30e9\u30b9\nclass FileOperationException extends Exception\n{\n    protected $filePath;\n    \n    public function __construct($message, $filePath, $code = 0, Exception $previous = null) {\n        $this-&gt;filePath = $filePath;\n        parent::__construct($message, $code, $previous);\n    }\n    \n    public function getFilePath() {\n        return $this-&gt;filePath;\n    }\n    \n    \/\/ \u30a8\u30e9\u30fc\u30bf\u30a4\u30d7\u306b\u57fa\u3065\u3044\u305f\u9069\u5207\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u751f\u6210\n    public static function fromErrorType($type, $filePath) {\n        switch ($type) {\n            case 'not_found':\n                return new self(\"\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\", $filePath, 404);\n            case 'permission':\n                return new self(\"\u30d5\u30a1\u30a4\u30eb\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\", $filePath, 403);\n            case 'io_error':\n                return new self(\"\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u66f8\u304d\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\", $filePath, 500);\n            default:\n                return new self(\"\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u4e2d\u306b\u672a\u77e5\u306e\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\", $filePath, 500);\n        }\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\ntry {\n    $filePath = 'data\/users.csv';\n    if (!file_exists($filePath)) {\n        throw FileOperationException::fromErrorType('not_found', $filePath);\n    }\n    if (!is_readable($filePath)) {\n        throw FileOperationException::fromErrorType('permission', $filePath);\n    }\n    \n    $content = file_get_contents($filePath);\n    if ($content === false) {\n        throw FileOperationException::fromErrorType('io_error', $filePath);\n    }\n    \n    \/\/ \u6b63\u5e38\u51e6\u7406...\n    \n} catch (FileOperationException $e) {\n    echo \"\u30a8\u30e9\u30fc (\" . $e-&gt;getCode() . \"): \" . $e-&gt;getMessage() . PHP_EOL;\n    echo \"\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9: \" . $e-&gt;getFilePath() . PHP_EOL;\n    \n    \/\/ \u30a8\u30e9\u30fc\u30b3\u30fc\u30c9\u306b\u57fa\u3065\u3044\u305f\u30ea\u30ab\u30d0\u30ea\u51e6\u7406\n    if ($e-&gt;getCode() === 404) {\n        \/\/ \u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u5834\u5408\u306e\u51e6\u7406\n        createEmptyFile($e-&gt;getFilePath());\n    } else if ($e-&gt;getCode() === 403) {\n        \/\/ \u6a29\u9650\u4e0d\u8db3\u306e\u5834\u5408\u306e\u51e6\u7406\n        notifyAdminAboutPermissionIssue($e-&gt;getFilePath());\n    }\n} catch (Exception $e) {\n    \/\/ \u305d\u306e\u4ed6\u306e\u4f8b\u5916\u51e6\u7406\n    echo \"\u4e88\u671f\u3057\u306a\u3044\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: \" . $e-&gt;getMessage() . PHP_EOL;\n    \/\/ \u30ed\u30b0\u306b\u8a18\u9332\n    error_log($e-&gt;getMessage());\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-57\">\u30e6\u30fc\u30b6\u30fc\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8<\/h4>\n\n\n\n<p>\u30a8\u30f3\u30c9\u30e6\u30fc\u30b6\u30fc\u5411\u3051\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u6280\u8853\u7684\u306a\u8a73\u7d30\u3092\u96a0\u3057\u3001\u5206\u304b\u308a\u3084\u3059\u3044\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u5206\u96e2\nfunction getPublicErrorMessage($exception) {\n    \/\/ \u672c\u756a\u74b0\u5883\u3067\u306f\u6280\u8853\u7684\u306a\u8a73\u7d30\u3092\u96a0\u3059\n    if (isProductionEnvironment()) {\n        \/\/ \u30a8\u30e9\u30fc\u3092\u30ed\u30b0\u306b\u8a18\u9332\n        logException($exception);\n        \n        \/\/ \u30e6\u30fc\u30b6\u30fc\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8fd4\u3059\n        return \"\u7533\u3057\u8a33\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\" .\n               \"\u3057\u3070\u3089\u304f\u7d4c\u3063\u3066\u304b\u3089\u3082\u3046\u4e00\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002\";\n    } else {\n        \/\/ \u958b\u767a\u74b0\u5883\u3067\u306f\u8a73\u7d30\u3092\u8868\u793a\n        return \"\u30a8\u30e9\u30fc: \" . $exception-&gt;getMessage() . \n               \" in \" . $exception-&gt;getFile() . \n               \" on line \" . $exception-&gt;getLine();\n    }\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-58\">\u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u78ba\u8a8d\u3068\u6a29\u9650\u30c1\u30a7\u30c3\u30af\u3067\u5148\u56de\u308a\u30a8\u30e9\u30fc\u9632\u6b62<\/h3>\n\n\n\n<p>\u591a\u304f\u306e\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u30a8\u30e9\u30fc\u306f\u3001\u4e8b\u524d\u306e\u30c1\u30a7\u30c3\u30af\u3067\u9632\u3050\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u3066\u304b\u3089\u5bfe\u51e6\u3059\u308b\u3088\u308a\u3082\u3001\u5148\u306b\u9632\u6b62\u3059\u308b\u65b9\u304c\u52b9\u7387\u7684\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-59\">\u57fa\u672c\u7684\u306a\u4e8b\u524d\u30c1\u30a7\u30c3\u30af<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u30c1\u30a7\u30c3\u30af\nif (!file_exists($filePath)) {\n    \/\/ \u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306e\u51e6\u7406\n    echo \"\u30d5\u30a1\u30a4\u30eb '$filePath' \u304c\u5b58\u5728\u3057\u307e\u305b\u3093\" . PHP_EOL;\n    return false;\n}\n\n\/\/ \u8aad\u307f\u53d6\u308a\u6a29\u9650\u306e\u30c1\u30a7\u30c3\u30af\nif (!is_readable($filePath)) {\n    echo \"\u30d5\u30a1\u30a4\u30eb '$filePath' \u306f\u8aad\u307f\u53d6\u308a\u53ef\u80fd\u3067\u306f\u3042\u308a\u307e\u305b\u3093\" . PHP_EOL;\n    return false;\n}\n\n\/\/ \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304b\u3069\u3046\u304b\u306e\u30c1\u30a7\u30c3\u30af\nif (is_dir($filePath)) {\n    echo \"'$filePath' \u306f\u30d5\u30a1\u30a4\u30eb\u3067\u306f\u306a\u304f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u3059\" . PHP_EOL;\n    return false;\n}\n\n\/\/ \u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u306e\u30c1\u30a7\u30c3\u30af\n$maxSize = 10 * 1024 * 1024; \/\/ 10MB\nif (filesize($filePath) &gt; $maxSize) {\n    echo \"\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u304c\u5927\u304d\u3059\u304e\u307e\u3059 (\u6700\u5927 \" . ($maxSize \/ 1024 \/ 1024) . \"MB)\" . PHP_EOL;\n    return false;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-60\">\u30d1\u30b9\u306e\u691c\u8a3c\u3068\u6b63\u898f\u5316<\/h4>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u3092\u542b\u3080\u30d1\u30b9\u306f\u3001\u7279\u306b\u614e\u91cd\u306b\u6271\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d1\u30b9\u306e\u6b63\u898f\u5316\u3068\u691c\u8a3c\nfunction getValidatedPath($userPath, $basePath) {\n    \/\/ \u76f8\u5bfe\u30d1\u30b9\u3092\u7d76\u5bfe\u30d1\u30b9\u306b\u5909\u63db\n    $fullPath = realpath($basePath . '\/' . $userPath);\n    \n    \/\/ \u30d1\u30b9\u304c\u5b58\u5728\u3057\u306a\u3044\u3001\u307e\u305f\u306f\u30d9\u30fc\u30b9\u30d1\u30b9\u306e\u5916\u5074\u306b\u3042\u308b\u5834\u5408\n    if ($fullPath === false || strpos($fullPath, realpath($basePath)) !== 0) {\n        throw new Exception(\"\u7121\u52b9\u306a\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3067\u3059\");\n    }\n    \n    return $fullPath;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\ntry {\n    $userInput = $_GET['filename'] ?? '';\n    $safeFilePath = getValidatedPath($userInput, '\/var\/www\/uploads');\n    \n    $content = file_get_contents($safeFilePath);\n    \/\/ \u51e6\u7406\u3092\u7d9a\u884c...\n    \n} catch (Exception $e) {\n    echo \"\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage() . PHP_EOL;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-61\">\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u30e1\u30ab\u30cb\u30ba\u30e0\u306e\u5b9f\u88c5<\/h4>\n\n\n\n<p>\u30a8\u30e9\u30fc\u767a\u751f\u6642\u306b\u4ee3\u66ff\u624b\u6bb5\u3092\u7528\u610f\u3057\u3066\u304a\u304f\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5805\u7262\u6027\u304c\u5411\u4e0a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u51e6\u7406\u306e\u4f8b\uff1a\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\nfunction loadConfig($configFile) {\n    $config = [];\n    \n    \/\/ \u7b2c1\u5019\u88dc\uff1a\u6307\u5b9a\u3055\u308c\u305f\u30d1\u30b9\n    if (file_exists($configFile) &amp;&amp; is_readable($configFile)) {\n        $config = parseConfigFile($configFile);\n    } \n    \/\/ \u7b2c2\u5019\u88dc\uff1a\u74b0\u5883\u5909\u6570\u306b\u57fa\u3065\u304f\u30d1\u30b9\n    else if (isset($_ENV['CONFIG_PATH']) &amp;&amp; file_exists($_ENV['CONFIG_PATH'])) {\n        $config = parseConfigFile($_ENV['CONFIG_PATH']);\n    } \n    \/\/ \u7b2c3\u5019\u88dc\uff1a\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\n    else {\n        error_log(\"\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u305f\u3081\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u307e\u3059\");\n        $config = getDefaultConfig();\n    }\n    \n    return $config;\n}\n<\/pre>\n\n\n\n<p>\u9069\u5207\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306f\u3001\u5358\u306b\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a\u3059\u308b\u3060\u3051\u3067\u306f\u306a\u304f\u3001\u4ee5\u4e0b\u306e\u70b9\u3092\u8003\u616e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u306e\u7a2e\u985e\u306b\u5fdc\u3058\u305f\u9069\u5207\u306a\u5bfe\u5fdc<\/strong>: \u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u3001\u6a29\u9650\u304c\u306a\u3044\u3001\u306a\u3069<\/li>\n\n\n\n<li><strong>\u8a73\u7d30\u306a\u30ed\u30b0\u8a18\u9332<\/strong>: \u958b\u767a\u8005\u5411\u3051\u306b\u5341\u5206\u306a\u60c5\u5831\u3092\u30ed\u30b0\u306b\u6b8b\u3059<\/li>\n\n\n\n<li><strong>\u30e6\u30fc\u30b6\u30fc\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u8868\u793a<\/strong>: \u30a8\u30f3\u30c9\u30e6\u30fc\u30b6\u30fc\u306b\u306f\u5206\u304b\u308a\u3084\u3059\u3044\u60c5\u5831\u3092\u63d0\u4f9b<\/li>\n\n\n\n<li><strong>\u53ef\u80fd\u3067\u3042\u308c\u3070\u81ea\u52d5\u56de\u5fa9<\/strong>: \u4e00\u6642\u7684\u306a\u30a8\u30e9\u30fc\u306f\u81ea\u52d5\u7684\u306b\u30ea\u30c8\u30e9\u30a4\u3059\u308b<\/li>\n\n\n\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ea\u30b9\u30af\u306e\u6700\u5c0f\u5316<\/strong>: \u30a8\u30e9\u30fc\u60c5\u5831\u306b\u3088\u308b\u60c5\u5831\u6f0f\u6d29\u3092\u9632\u3050<\/li>\n<\/ol>\n\n\n\n<p>\u3053\u3046\u3057\u305f\u5305\u62ec\u7684\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306b\u3088\u308a\u3001\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u3092\u542b\u3080\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4fe1\u983c\u6027\u3068\u5b89\u5b9a\u6027\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-62\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f<\/h2>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u306f\u3001Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3051\u308b\u4e3b\u8981\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ea\u30b9\u30af\u306e\u6e90\u3067\u3059\u3002\u4e0d\u9069\u5207\u306b\u5b9f\u88c5\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u51e6\u7406\u306f\u3001\u60c5\u5831\u6f0f\u6d29\u3001\u30b5\u30fc\u30d0\u30fc\u4fb5\u5bb3\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u306e\u8106\u5f31\u6027\u306b\u3064\u306a\u304c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001PHP\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u5b89\u5168\u306b\u8aad\u307f\u8fbc\u3080\u305f\u3081\u306e\u91cd\u8981\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3068\u5bfe\u7b56\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-63\">\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306e\u691c\u8a3c\u3068\u6b63\u898f\u5316\u3067\u8106\u5f31\u6027\u3092\u9632\u3050<\/h3>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u3092\u542b\u3080\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306e\u51e6\u7406\u306f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4e0a\u306e\u91cd\u5927\u306a\u30ea\u30b9\u30af\u3067\u3059\u3002\u7279\u306b\u3001Web\u4e0a\u3067\u52d5\u4f5c\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u4fe1\u983c\u3067\u304d\u306a\u3044\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u3092\u9069\u5207\u306b\u691c\u8a3c\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-64\">\u30d1\u30b9\u6b63\u898f\u5316\u306e\u91cd\u8981\u6027<\/h4>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306b\u306f\u3001\u76f8\u5bfe\u30d1\u30b9\u3001\u30b7\u30f3\u30dc\u30ea\u30c3\u30af\u30ea\u30f3\u30af\u3001\u9023\u7d9a\u3057\u305f\u30b9\u30e9\u30c3\u30b7\u30e5\u306a\u3069\u3001\u69d8\u3005\u306a\u8868\u73fe\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3089\u3092\u9069\u5207\u306b\u51e6\u7406\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u30d1\u30b9\u306e\u6b63\u898f\u5316\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5371\u967a\u306a\u4f8b\uff1a\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u3092\u305d\u306e\u307e\u307e\u4f7f\u7528\n\/\/ $filePath = $_GET['file']; \/\/ \u7d76\u5bfe\u306b\u884c\u308f\u306a\u3044\u3067\u304f\u3060\u3055\u3044\uff01\n\n\/\/ \u5b89\u5168\u306a\u4f8b\uff1a\u30d1\u30b9\u306e\u6b63\u898f\u5316\nfunction getSafePath($userInput, $baseDir) {\n    \/\/ \u30e6\u30fc\u30b6\u30fc\u5165\u529b\u304b\u3089\u5b89\u5168\u3067\u306a\u3044\u6587\u5b57\u3092\u524a\u9664\n    $filteredInput = preg_replace('\/[^a-zA-Z0-9_\\-\\.]\/', '', $userInput);\n    \n    \/\/ \u7d76\u5bfe\u30d1\u30b9\u3092\u53d6\u5f97\uff08\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306ffalse\u3092\u8fd4\u3059\uff09\n    $fullPath = realpath($baseDir . '\/' . $filteredInput);\n    \n    \/\/ \u30d1\u30b9\u304c\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u3042\u308b\u304b\u30c1\u30a7\u30c3\u30af\n    if ($fullPath === false || strpos($fullPath, realpath($baseDir)) !== 0) {\n        return false; \/\/ \u7121\u52b9\u306a\u30d1\u30b9\u307e\u305f\u306f\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5916\n    }\n    \n    return $fullPath;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$baseDir = '\/var\/www\/uploads';\n$userFile = $_GET['file'] ?? '';\n$safePath = getSafePath($userFile, $baseDir);\n\nif ($safePath === false) {\n    die('\u7121\u52b9\u306a\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3067\u3059');\n}\n\n\/\/ \u5b89\u5168\u306a\u30d1\u30b9\u3092\u4f7f\u7528\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080\n$content = file_get_contents($safePath);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-65\">\u30d1\u30b9\u691c\u8a3c\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3092\u6271\u3046\u969b\u306e\u5b89\u5168\u306a\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30db\u30ef\u30a4\u30c8\u30ea\u30b9\u30c8\u30a2\u30d7\u30ed\u30fc\u30c1<\/strong>: \u8a31\u53ef\u3055\u308c\u305f\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u306e\u307f\u3092\u53d7\u3051\u5165\u308c\u308b<\/li>\n\n\n\n<li><strong>\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u5236\u9650<\/strong>: \u6307\u5b9a\u3057\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5916\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u9632\u3050<\/li>\n\n\n\n<li><strong>realpath()\u306e\u4f7f\u7528<\/strong>: \u30d1\u30b9\u3092\u6b63\u898f\u5316\u3057\u3066\u76f8\u5bfe\u30d1\u30b9\u8981\u7d20\u3092\u89e3\u6c7a\u3059\u308b<\/li>\n\n\n\n<li><strong>\u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u3068\u7a2e\u985e\u3092\u78ba\u8a8d<\/strong>: \u5b9f\u969b\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b<\/li>\n\n\n\n<li><strong>\u62e1\u5f35\u5b50\u306e\u691c\u8a3c<\/strong>: \u8a31\u53ef\u3055\u308c\u305f\u62e1\u5f35\u5b50\u306e\u307f\u30a2\u30af\u30bb\u30b9\u3092\u8a31\u53ef\u3059\u308b<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u62e1\u5f35\u5b50\u306e\u30db\u30ef\u30a4\u30c8\u30ea\u30b9\u30c8\u691c\u8a3c\nfunction hasAllowedExtension($filename) {\n    \/\/ \u8a31\u53ef\u3055\u308c\u305f\u62e1\u5f35\u5b50\u306e\u30ea\u30b9\u30c8\n    $allowedExtensions = ['txt', 'log', 'csv', 'json', 'xml'];\n    \n    \/\/ \u30d1\u30b9\u60c5\u5831\u3092\u5206\u89e3\n    $pathInfo = pathinfo($filename);\n    $extension = strtolower($pathInfo['extension'] ?? '');\n    \n    return in_array($extension, $allowedExtensions);\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nif (!hasAllowedExtension($safePath)) {\n    die('\u8a31\u53ef\u3055\u308c\u3066\u3044\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u3067\u3059');\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-66\">\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30c8\u30e9\u30d0\u30fc\u30b5\u30eb\u653b\u6483\u304b\u3089\u5b88\u308b\u305f\u3081\u306e\u5bfe\u7b56<\/h3>\n\n\n\n<p>\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30c8\u30e9\u30d0\u30fc\u30b5\u30eb\uff08\u30d1\u30b9\u30c8\u30e9\u30d0\u30fc\u30b5\u30eb\uff09\u653b\u6483\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u610f\u56f3\u3057\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u4e00\u822c\u7684\u306a\u653b\u6483\u624b\u6cd5\u3067\u3059\u3002\u5178\u578b\u7684\u306b\u306f\u3001<code>..\/<\/code>\u3084<code>..\\\\<\/code>\u306a\u3069\u306e\u30d1\u30b9\u8981\u7d20\u3092\u4f7f\u7528\u3057\u3066\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u968e\u5c64\u3092\u79fb\u52d5\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-67\">\u653b\u6483\u306e\u30e1\u30ab\u30cb\u30ba\u30e0\u3068\u5bfe\u7b56<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\u60aa\u610f\u306e\u3042\u308b\u30ea\u30af\u30a8\u30b9\u30c8\u4f8b\uff1a\nfilename=..\/..\/..\/etc\/passwd\nfilename=..%2F..%2F..%2Fetc%2Fpasswd \uff08URL\u30a8\u30f3\u30b3\u30fc\u30c9\uff09\n<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306a\u653b\u6483\u304b\u3089\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b88\u308b\u306b\u306f\u3001\u6b21\u306e\u5bfe\u7b56\u304c\u52b9\u679c\u7684\u3067\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30c8\u30e9\u30d0\u30fc\u30b5\u30eb\u5bfe\u7b56\nfunction preventDirectoryTraversal($userInput, $baseDir) {\n    \/\/ 1. \u5371\u967a\u306a\u30d1\u30bf\u30fc\u30f3\u3092\u691c\u51fa\n    if (preg_match('#\\.\\.\/#', $userInput) || strpos($userInput, '..\/') !== false) {\n        error_log(\"\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30c8\u30e9\u30d0\u30fc\u30b5\u30eb\u653b\u6483\u306e\u53ef\u80fd\u6027: \" . $userInput);\n        return false;\n    }\n    \n    \/\/ 2. URL\u30c7\u30b3\u30fc\u30c9\u5f8c\u3082\u30c1\u30a7\u30c3\u30af\uff08\u30a8\u30f3\u30b3\u30fc\u30c9\u3055\u308c\u305f\u653b\u6483\u306b\u5bfe\u51e6\uff09\n    $decodedInput = urldecode($userInput);\n    if (preg_match('#\\.\\.\/#', $decodedInput) || strpos($decodedInput, '..\/') !== false) {\n        error_log(\"\u30a8\u30f3\u30b3\u30fc\u30c9\u3055\u308c\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30c8\u30e9\u30d0\u30fc\u30b5\u30eb\u653b\u6483\u306e\u53ef\u80fd\u6027: \" . $userInput);\n        return false;\n    }\n    \n    \/\/ 3. \u30d1\u30b9\u3092\u6b63\u898f\u5316\u3057\u3066\u518d\u691c\u8a3c\n    $fullPath = realpath($baseDir . '\/' . $userInput);\n    if ($fullPath === false || strpos($fullPath, realpath($baseDir)) !== 0) {\n        return false;\n    }\n    \n    return $fullPath;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-68\">\u5305\u62ec\u7684\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56<\/h4>\n\n\n\n<p>\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30c8\u30e9\u30d0\u30fc\u30b5\u30eb\u304b\u3089\u5b88\u308b\u305f\u3081\u306e\u5305\u62ec\u7684\u306a\u5bfe\u7b56\u306b\u306f\u3001\u6b21\u306e\u8981\u7d20\u304c\u542b\u307e\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5c02\u7528\u306e\u30a2\u30af\u30bb\u30b9\u95a2\u6570\u3092\u4f5c\u6210<\/strong>: \u3059\u3079\u3066\u306e\u30d5\u30a1\u30a4\u30eb\u30a2\u30af\u30bb\u30b9\u3092\u4e00\u5143\u7ba1\u7406<\/li>\n\n\n\n<li><strong>\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u7ba1\u7406<\/strong>: \u30d5\u30a1\u30a4\u30eb\u540d\u3067\u306f\u306a\u304fID\u3067\u30a2\u30af\u30bb\u30b9<\/li>\n\n\n\n<li><strong>\u91cd\u8981\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30b7\u30f3\u30dc\u30ea\u30c3\u30af\u30ea\u30f3\u30af\u4f5c\u6210\u3092\u907f\u3051\u308b<\/strong><\/li>\n\n\n\n<li><strong>Web\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\u306a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u5236\u9650<\/strong>: \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30eb\u30fc\u30c8\u5916\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58<\/li>\n\n\n\n<li><strong>\u6700\u5c0f\u6a29\u9650\u306e\u539f\u5247<\/strong>: \u5fc5\u8981\u6700\u5c0f\u9650\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u306e\u307f\u3092\u4ed8\u4e0e<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5b89\u5168\u306a\u30d5\u30a1\u30a4\u30eb\u30a2\u30af\u30bb\u30b9\u95a2\u6570\u306e\u4f8b\nclass SecureFileAccess {\n    private $baseDir;\n    private $allowedTypes;\n    \n    public function __construct($baseDir, array $allowedTypes = ['txt', 'csv', 'json']) {\n        $this-&gt;baseDir = realpath($baseDir);\n        $this-&gt;allowedTypes = $allowedTypes;\n    }\n    \n    public function readFile($filename) {\n        $safePath = $this-&gt;getSafePath($filename);\n        if ($safePath === false) {\n            throw new Exception(\"\u5b89\u5168\u3067\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u304c\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\");\n        }\n        \n        return file_get_contents($safePath);\n    }\n    \n    private function getSafePath($filename) {\n        \/\/ \u30d5\u30a1\u30a4\u30eb\u540d\u304b\u3089\u5371\u967a\u306a\u6587\u5b57\u3092\u524a\u9664\n        $safeFilename = preg_replace('\/[^a-zA-Z0-9_\\-\\.]\/', '', basename($filename));\n        \n        \/\/ \u62e1\u5f35\u5b50\u3092\u30c1\u30a7\u30c3\u30af\n        $extension = strtolower(pathinfo($safeFilename, PATHINFO_EXTENSION));\n        if (!in_array($extension, $this-&gt;allowedTypes)) {\n            return false;\n        }\n        \n        \/\/ \u30d5\u30eb\u30d1\u30b9\u3092\u69cb\u7bc9\u3057\u3066\u691c\u8a3c\n        $fullPath = realpath($this-&gt;baseDir . '\/' . $safeFilename);\n        if ($fullPath === false || strpos($fullPath, $this-&gt;baseDir) !== 0) {\n            return false;\n        }\n        \n        return $fullPath;\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\ntry {\n    $fileAccess = new SecureFileAccess('\/var\/www\/data');\n    $content = $fileAccess-&gt;readFile($_GET['file'] ?? '');\n    echo $content;\n} catch (Exception $e) {\n    http_response_code(403);\n    echo \"\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage();\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-69\">\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u5b89\u5168\u306a\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u304b\u3089\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u7279\u306b\u6ce8\u610f\u3057\u3066\u6271\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u60aa\u610f\u306e\u3042\u308b\u30b3\u30fc\u30c9\u3084\u4e88\u671f\u3057\u306a\u3044\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-70\">\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u57fa\u672c\u7684\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u5b89\u5168\u306a\u51e6\u7406\nfunction securelyHandleUploadedFile($fileInput, $destinationDir) {\n    \/\/ 1. \u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30a8\u30e9\u30fc\u3092\u30c1\u30a7\u30c3\u30af\n    if (!isset($_FILES[$fileInput]) || $_FILES[$fileInput]['error'] !== UPLOAD_ERR_OK) {\n        $errorMessage = getFileUploadErrorMessage($_FILES[$fileInput]['error'] ?? -1);\n        throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30a8\u30e9\u30fc: \" . $errorMessage);\n    }\n    \n    $tmpName = $_FILES[$fileInput]['tmp_name'];\n    $originalName = $_FILES[$fileInput]['name'];\n    \n    \/\/ 2. MIME\u578b\u306e\u691c\u8a3c\n    $finfo = new finfo(FILEINFO_MIME_TYPE);\n    $mime = $finfo-&gt;file($tmpName);\n    $allowedMimes = ['text\/plain', 'text\/csv', 'application\/json', 'application\/xml'];\n    \n    if (!in_array($mime, $allowedMimes)) {\n        throw new Exception(\"\u8a31\u53ef\u3055\u308c\u3066\u3044\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u3067\u3059: $mime\");\n    }\n    \n    \/\/ 3. \u30d5\u30a1\u30a4\u30eb\u540d\u306e\u5b89\u5168\u306a\u751f\u6210\uff08\u5143\u306e\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u4f7f\u308f\u306a\u3044\uff09\n    $extension = pathinfo($originalName, PATHINFO_EXTENSION);\n    $safeExtension = strtolower($extension);\n    if (!in_array($safeExtension, ['txt', 'csv', 'json', 'xml'])) {\n        throw new Exception(\"\u8a31\u53ef\u3055\u308c\u3066\u3044\u306a\u3044\u62e1\u5f35\u5b50\u3067\u3059: $safeExtension\");\n    }\n    \n    \/\/ \u30e6\u30cb\u30fc\u30af\u306a\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u751f\u6210\n    $newFilename = sprintf('%s.%s', sha1_file($tmpName) . uniqid(), $safeExtension);\n    $destination = $destinationDir . '\/' . $newFilename;\n    \n    \/\/ 4. \u30d5\u30a1\u30a4\u30eb\u306e\u79fb\u52d5\n    if (!move_uploaded_file($tmpName, $destination)) {\n        throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u306e\u4fdd\u5b58\u306b\u5931\u6557\u3057\u307e\u3057\u305f\");\n    }\n    \n    \/\/ 5. \u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\uff08\u8aad\u307f\u53d6\u308a\u5c02\u7528\uff09\n    chmod($destination, 0444);\n    \n    return [\n        'path' =&gt; $destination,\n        'name' =&gt; $newFilename,\n        'original_name' =&gt; $originalName,\n        'mime' =&gt; $mime\n    ];\n}\n\n\/\/ \u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u53d6\u5f97\nfunction getFileUploadErrorMessage($errorCode) {\n    switch ($errorCode) {\n        case UPLOAD_ERR_INI_SIZE:\n            return \"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304cphp.ini\u306eupload_max_filesize\u6307\u793a\u5024\u3092\u8d85\u3048\u3066\u3044\u307e\u3059\";\n        case UPLOAD_ERR_FORM_SIZE:\n            return \"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304cHTML \u30d5\u30a9\u30fc\u30e0\u3067\u6307\u5b9a\u3055\u308c\u305f MAX_FILE_SIZE \u3092\u8d85\u3048\u3066\u3044\u307e\u3059\";\n        case UPLOAD_ERR_PARTIAL:\n            return \"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u4e00\u90e8\u306e\u307f\u3057\u304b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\";\n        case UPLOAD_ERR_NO_FILE:\n            return \"\u30d5\u30a1\u30a4\u30eb\u304c\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u3066\u3044\u307e\u305b\u3093\";\n        case UPLOAD_ERR_NO_TMP_DIR:\n            return \"\u4e00\u6642\u30d5\u30a9\u30eb\u30c0\u304c\u3042\u308a\u307e\u305b\u3093\";\n        case UPLOAD_ERR_CANT_WRITE:\n            return \"\u30c7\u30a3\u30b9\u30af\u3078\u306e\u66f8\u304d\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f\";\n        case UPLOAD_ERR_EXTENSION:\n            return \"PHP\u306e\u62e1\u5f35\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u4e2d\u6b62\u3057\u307e\u3057\u305f\";\n        default:\n            return \"\u4e0d\u660e\u306a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\";\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-71\">\u30d5\u30a1\u30a4\u30eb\u5185\u5bb9\u306e\u691c\u8a3c<\/h4>\n\n\n\n<p>\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306eMIME\u578b\u306e\u78ba\u8a8d\u3060\u3051\u3067\u306f\u5341\u5206\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u81ea\u4f53\u3082\u691c\u8a3c\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u691c\u8a3c\nfunction validateTextFileContent($filePath) {\n    \/\/ \u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u306e\u4e0a\u9650\u30c1\u30a7\u30c3\u30af\n    $maxSize = 5 * 1024 * 1024; \/\/ 5MB\n    if (filesize($filePath) &gt; $maxSize) {\n        return false;\n    }\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092\u8aad\u307f\u8fbc\u3080\n    $content = file_get_contents($filePath);\n    \n    \/\/ \u5371\u967a\u306aPHP\u30b3\u30fc\u30c9\u3092\u691c\u7d22\n    if (preg_match('\/&lt;\\?php\/i', $content) || preg_match('\/&lt;\\?\/i', $content)) {\n        return false;\n    }\n    \n    \/\/ HTML\u30bf\u30b0\u3084JavaScript\u3092\u691c\u7d22\n    if (preg_match('\/&lt;script\/i', $content) || preg_match('\/&lt;iframe\/i', $content)) {\n        return false;\n    }\n    \n    \/\/ \u30b7\u30a7\u30eb\u30b3\u30de\u30f3\u30c9\u306a\u3069\u306e\u5371\u967a\u306a\u6587\u5b57\u5217\u3092\u691c\u7d22\n    $dangerousPatterns = [\n        '\/exec\\s*\\(\/i',\n        '\/shell_exec\\s*\\(\/i',\n        '\/system\\s*\\(\/i',\n        '\/passthru\\s*\\(\/i',\n        '\/eval\\s*\\(\/i',\n        '\/base64_decode\\s*\\(\/i'\n    ];\n    \n    foreach ($dangerousPatterns as $pattern) {\n        if (preg_match($pattern, $content)) {\n            return false;\n        }\n    }\n    \n    return true;\n}\n\n\/\/ CSV\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u691c\u8a3c\nfunction validateCSVContent($filePath) {\n    $handle = fopen($filePath, 'r');\n    if ($handle === false) {\n        return false;\n    }\n    \n    $rowCount = 0;\n    $maxRows = 10000; \/\/ \u6700\u5927\u884c\u6570\u306e\u5236\u9650\n    \n    while (($row = fgetcsv($handle)) !== false) {\n        $rowCount++;\n        \n        \/\/ \u884c\u6570\u5236\u9650\u30c1\u30a7\u30c3\u30af\n        if ($rowCount &gt; $maxRows) {\n            fclose($handle);\n            return false;\n        }\n        \n        \/\/ \u5404\u30bb\u30eb\u306e\u5185\u5bb9\u3092\u691c\u8a3c\n        foreach ($row as $cell) {\n            \/\/ \u30bb\u30eb\u306e\u9577\u3055\u30c1\u30a7\u30c3\u30af\n            if (strlen($cell) &gt; 1000) {\n                fclose($handle);\n                return false;\n            }\n            \n            \/\/ \u5371\u967a\u306a\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30c1\u30a7\u30c3\u30af\n            if (preg_match('\/&lt;\\?php\/i', $cell) || preg_match('\/&lt;script\/i', $cell)) {\n                fclose($handle);\n                return false;\n            }\n        }\n    }\n    \n    fclose($handle);\n    return true;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-72\">\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb\u306e\u5b89\u5168\u306a\u8aad\u307f\u8fbc\u307f<\/h4>\n\n\n\n<p>\u691c\u8a3c\u6e08\u307f\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080\u969b\u306b\u3082\u3001\u8ffd\u52a0\u306e\u5b89\u5168\u5bfe\u7b56\u3092\u8b1b\u3058\u308b\u3079\u304d\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u691c\u8a3c\u6e08\u307f\u30d5\u30a1\u30a4\u30eb\u306e\u5b89\u5168\u306a\u8aad\u307f\u8fbc\u307f\nfunction safelyReadUploadedFile($filePath, $fileType) {\n    \/\/ \u30d1\u30b9\u306e\u518d\u691c\u8a3c\n    if (!file_exists($filePath) || !is_readable($filePath)) {\n        throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u306a\u3044\u304b\u3001\u8aad\u307f\u53d6\u308a\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\");\n    }\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u306b\u5fdc\u3058\u305f\u51e6\u7406\n    switch ($fileType) {\n        case 'txt':\n            \/\/ \u30d7\u30ec\u30fc\u30f3\u30c6\u30ad\u30b9\u30c8\u306e\u5834\u5408\u306f\u305d\u306e\u307e\u307e\u8aad\u307f\u8fbc\u307f\n            return file_get_contents($filePath);\n            \n        case 'csv':\n            \/\/ CSV\u306e\u5834\u5408\u306f\u69cb\u9020\u5316\u30c7\u30fc\u30bf\u3068\u3057\u3066\u51e6\u7406\n            $data = [];\n            $handle = fopen($filePath, 'r');\n            if ($handle) {\n                $headers = fgetcsv($handle);\n                while (($row = fgetcsv($handle)) !== false) {\n                    \/\/ \u30d8\u30c3\u30c0\u30fc\u3068\u5024\u3092\u5bfe\u5fdc\u4ed8\u3051\n                    $data[] = array_combine($headers, $row);\n                }\n                fclose($handle);\n            }\n            return $data;\n            \n        case 'json':\n            \/\/ JSON\u306e\u5834\u5408\u306f\u914d\u5217\u306b\u5909\u63db\u3057\u3066\u8fd4\u3059\n            $content = file_get_contents($filePath);\n            $data = json_decode($content, true);\n            if (json_last_error() !== JSON_ERROR_NONE) {\n                throw new Exception(\"JSON\u306e\u89e3\u6790\u306b\u5931\u6557\u3057\u307e\u3057\u305f: \" . json_last_error_msg());\n            }\n            return $data;\n            \n        case 'xml':\n            \/\/ XML\u306e\u5834\u5408\u306fSimpleXML\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u3057\u3066\u8fd4\u3059\n            libxml_use_internal_errors(true);\n            $xml = simplexml_load_file($filePath);\n            if ($xml === false) {\n                $errors = libxml_get_errors();\n                libxml_clear_errors();\n                throw new Exception(\"XML\u306e\u89e3\u6790\u306b\u5931\u6557\u3057\u307e\u3057\u305f: \" . $errors[0]-&gt;message);\n            }\n            return $xml;\n            \n        default:\n            throw new Exception(\"\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u3067\u3059\");\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-73\">\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e00\u6642\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f7f\u7528<\/strong>: \u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb\u306f\u521d\u3081\u306b\u4e00\u6642\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u4fdd\u5b58\u3057\u3001\u691c\u8a3c\u5f8c\u306b\u6700\u7d42\u7684\u306a\u5834\u6240\u306b\u79fb\u52d5<\/li>\n\n\n\n<li><strong>\u5143\u306e\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u4f7f\u308f\u306a\u3044<\/strong>: \u30e6\u30fc\u30b6\u30fc\u304c\u63d0\u4f9b\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u76f4\u63a5\u4f7f\u7528\u305b\u305a\u3001\u65b0\u3057\u3044\u5b89\u5168\u306a\u540d\u524d\u3092\u751f\u6210<\/li>\n\n\n\n<li><strong>\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092\u691c\u8a3c<\/strong>: MIME\u30bf\u30a4\u30d7\u3060\u3051\u3067\u306a\u304f\u3001\u5b9f\u969b\u306e\u5185\u5bb9\u3082\u691c\u8a3c<\/li>\n\n\n\n<li><strong>Web\u304b\u3089\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u5834\u6240\u306b\u4fdd\u5b58<\/strong>: \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30eb\u30fc\u30c8\u5916\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u901a\u3058\u3066\u63d0\u4f9b<\/li>\n\n\n\n<li><strong>\u6700\u5c0f\u9650\u306e\u6a29\u9650\u3092\u8a2d\u5b9a<\/strong>: \u901a\u5e38\u306f\u8aad\u307f\u53d6\u308a\u5c02\u7528\u6a29\u9650\u3067\u5341\u5206\uff080444\uff09<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5b8c\u5168\u306a\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u306e\u4f8b\nfunction processUploadedFile($fileInputName) {\n    \/\/ 1. \u4e00\u6642\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30d1\u30b9\u306e\u8a2d\u5b9a\n    $tempDir = sys_get_temp_dir();\n    $finalDir = '\/var\/www\/data\/uploads';\n    \n    try {\n        \/\/ 2. \u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u51e6\u7406\n        $fileInfo = securelyHandleUploadedFile($fileInputName, $tempDir);\n        \n        \/\/ 3. \u30d5\u30a1\u30a4\u30eb\u5185\u5bb9\u306e\u691c\u8a3c\n        $extension = pathinfo($fileInfo['name'], PATHINFO_EXTENSION);\n        $isValid = false;\n        \n        switch ($extension) {\n            case 'txt':\n                $isValid = validateTextFileContent($fileInfo['path']);\n                break;\n            case 'csv':\n                $isValid = validateCSVContent($fileInfo['path']);\n                break;\n            \/\/ \u305d\u306e\u4ed6\u306e\u30bf\u30a4\u30d7\u306e\u691c\u8a3c...\n        }\n        \n        if (!$isValid) {\n            \/\/ \u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\n            unlink($fileInfo['path']);\n            throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u304c\u7121\u52b9\u3067\u3059\");\n        }\n        \n        \/\/ 4. \u6700\u7d42\u7684\u306a\u4fdd\u5b58\u5834\u6240\u306b\u79fb\u52d5\n        $finalPath = $finalDir . '\/' . $fileInfo['name'];\n        if (!rename($fileInfo['path'], $finalPath)) {\n            throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u306e\u79fb\u52d5\u306b\u5931\u6557\u3057\u307e\u3057\u305f\");\n        }\n        \n        \/\/ 5. \u5b89\u5168\u306b\u8aad\u307f\u8fbc\u307f\n        $data = safelyReadUploadedFile($finalPath, $extension);\n        \n        return [\n            'success' =&gt; true,\n            'data' =&gt; $data,\n            'file_info' =&gt; [\n                'path' =&gt; $finalPath,\n                'name' =&gt; $fileInfo['name'],\n                'original_name' =&gt; $fileInfo['original_name']\n            ]\n        ];\n        \n    } catch (Exception $e) {\n        \/\/ \u30a8\u30e9\u30fc\u30ed\u30b0\u306b\u8a18\u9332\n        error_log(\"\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage());\n        \n        return [\n            'success' =&gt; false,\n            'error' =&gt; $e-&gt;getMessage()\n        ];\n    }\n}\n<\/pre>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u64cd\u4f5c\u3092\u5b89\u5168\u306b\u5b9f\u88c5\u3059\u308b\u306b\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u306e\u691c\u8a3c\u3001\u30d1\u30b9\u306e\u6b63\u898f\u5316\u3001\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u691c\u8a3c\u3001\u9069\u5207\u306a\u6a29\u9650\u8a2d\u5b9a\u306a\u3069\u3001\u8907\u6570\u306e\u5c64\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u304c\u5fc5\u8981\u3067\u3059\u3002\u7279\u306b\u3001Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u306b\u95a2\u9023\u3059\u308b\u8106\u5f31\u6027\u306f\u6df1\u523b\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ea\u30b9\u30af\u306b\u306a\u308a\u5f97\u308b\u305f\u3081\u3001\u5e38\u306b\u7d30\u5fc3\u306e\u6ce8\u610f\u3092\u6255\u3046\u3079\u304d\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306f\u300c\u5c64\u306b\u3088\u308b\u9632\u5fa1\u300d\u306e\u8003\u3048\u65b9\u3067\u5b9f\u88c5\u3057\u3001\u5358\u4e00\u306e\u5bfe\u7b56\u306b\u4f9d\u5b58\u305b\u305a\u3001\u8907\u6570\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30e1\u30ab\u30cb\u30ba\u30e0\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u307e\u305f\u3001\u5b9a\u671f\u7684\u306b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3092\u898b\u76f4\u3057\u3001\u65b0\u305f\u306a\u8105\u5a01\u3084\u653b\u6483\u624b\u6cd5\u306b\u5bfe\u5fdc\u3059\u308b\u3053\u3068\u3082\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-74\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u64cd\u4f5c\u306f\u3001\u7279\u306b\u983b\u7e41\u306b\u5b9f\u884c\u3055\u308c\u308b\u5834\u5408\u3084\u30b5\u30a4\u30ba\u306e\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u6271\u3046\u5834\u5408\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u5927\u304d\u306a\u5f71\u97ff\u3092\u4e0e\u3048\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001PHP\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u3092\u6700\u9069\u5316\u3059\u308b\u305f\u3081\u306e\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-75\">\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6d3b\u7528\u3057\u305f\u8aad\u307f\u8fbc\u307f\u56de\u6570\u306e\u524a\u6e1b<\/h3>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u306f\u3001\u30e1\u30e2\u30ea\u30a2\u30af\u30bb\u30b9\u3068\u6bd4\u8f03\u3057\u3066\u306f\u308b\u304b\u306b\u9045\u3044\u64cd\u4f5c\u3067\u3059\u3002\u983b\u7e41\u306b\u8aad\u307f\u8fbc\u307e\u308c\u308b\u30d5\u30a1\u30a4\u30eb\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u3053\u3068\u3067\u3001I\/O\u64cd\u4f5c\u3092\u524a\u6e1b\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-76\">\u30a4\u30f3\u30e1\u30e2\u30ea\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u5b9f\u88c5<\/h4>\n\n\n\n<p>\u5358\u4e00\u30ea\u30af\u30a8\u30b9\u30c8\u5185\u3067\u540c\u3058\u30d5\u30a1\u30a4\u30eb\u3092\u8907\u6570\u56de\u8aad\u307f\u8fbc\u3080\u5834\u5408\u306f\u3001\u5358\u7d14\u306a\u5909\u6570\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u52b9\u679c\u7684\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b7\u30f3\u30d7\u30eb\u306a\u30d5\u30a1\u30a4\u30eb\u30ad\u30e3\u30c3\u30b7\u30e5\u5b9f\u88c5\nclass FileCache {\n    private static $cache = [];\n    \n    public static function get($filePath) {\n        if (!isset(self::$cache[$filePath])) {\n            if (!file_exists($filePath)) {\n                return false;\n            }\n            self::$cache[$filePath] = file_get_contents($filePath);\n        }\n        \n        return self::$cache[$filePath];\n    }\n    \n    public static function invalidate($filePath = null) {\n        if ($filePath === null) {\n            \/\/ \u5168\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30af\u30ea\u30a2\n            self::$cache = [];\n        } else {\n            \/\/ \u7279\u5b9a\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30af\u30ea\u30a2\n            unset(self::$cache[$filePath]);\n        }\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$content = FileCache::get('config.json');\n\/\/ \u4e8c\u56de\u76ee\u4ee5\u964d\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u53d6\u5f97\u3055\u308c\u308b\n$sameContent = FileCache::get('config.json');\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-77\">APCu\u306b\u3088\u308b\u6c38\u7d9a\u7684\u306a\u30ad\u30e3\u30c3\u30b7\u30e5<\/h4>\n\n\n\n<p>\u8907\u6570\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u9593\u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u5171\u6709\u3059\u308b\u306b\u306f\u3001APCu\uff08APC User Cache\uff09\u306a\u3069\u306ePHP\u62e1\u5f35\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ APCu\u3092\u4f7f\u3063\u305f\u30d5\u30a1\u30a4\u30eb\u30ad\u30e3\u30c3\u30b7\u30e5\nfunction getCachedFileContent($filePath, $ttl = 3600) {\n    $cacheKey = 'file_' . md5($filePath);\n    \n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u53d6\u5f97\u3092\u8a66\u307f\u308b\n    $content = apcu_fetch($cacheKey, $success);\n    \n    if ($success) {\n        return $content;\n    }\n    \n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u306a\u3044\u5834\u5408\u306f\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u8aad\u307f\u8fbc\u3080\n    if (!file_exists($filePath)) {\n        return false;\n    }\n    \n    $content = file_get_contents($filePath);\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u6700\u7d42\u66f4\u65b0\u6642\u523b\u3082\u30ad\u30e3\u30c3\u30b7\u30e5\n    $stat = stat($filePath);\n    $data = [\n        'content' =&gt; $content,\n        'mtime' =&gt; $stat['mtime']\n    ];\n    \n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u4fdd\u5b58\n    apcu_store($cacheKey, $data, $ttl);\n    \n    return $content;\n}\n\n\/\/ \u6700\u7d42\u66f4\u65b0\u6642\u523b\u30c1\u30a7\u30c3\u30af\u4ed8\u304d\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u53d6\u5f97\nfunction getFileContentWithMTimeCheck($filePath, $ttl = 3600) {\n    $cacheKey = 'file_' . md5($filePath);\n    \n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u53d6\u5f97\u3092\u8a66\u307f\u308b\n    $data = apcu_fetch($cacheKey, $success);\n    \n    if ($success) {\n        \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u6700\u7d42\u66f4\u65b0\u6642\u523b\u3092\u30c1\u30a7\u30c3\u30af\n        $stat = stat($filePath);\n        if ($data['mtime'] &gt;= $stat['mtime']) {\n            \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u6700\u65b0\n            return $data['content'];\n        }\n    }\n    \n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u306a\u3044\u304b\u53e4\u3044\u5834\u5408\u306f\u518d\u8aad\u307f\u8fbc\u307f\n    if (!file_exists($filePath)) {\n        return false;\n    }\n    \n    $content = file_get_contents($filePath);\n    \n    $stat = stat($filePath);\n    $data = [\n        'content' =&gt; $content,\n        'mtime' =&gt; $stat['mtime']\n    ];\n    \n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u66f4\u65b0\n    apcu_store($cacheKey, $data, $ttl);\n    \n    return $content;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-78\">\u30ad\u30e3\u30c3\u30b7\u30e5\u66f4\u65b0\u6226\u7565<\/h4>\n\n\n\n<p>\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u4f7f\u7528\u3059\u308b\u969b\u306b\u306f\u3001\u66f4\u65b0\u6226\u7565\u304c\u91cd\u8981\u3067\u3059\u3002\u4e00\u822c\u7684\u306a\u6226\u7565\u306b\u306f\u4ee5\u4e0b\u306e\u3082\u306e\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>TTL\uff08Time To Live\uff09<\/strong>: \u4e00\u5b9a\u6642\u9593\u5f8c\u306b\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u7121\u52b9\u5316<\/li>\n\n\n\n<li><strong>\u30d5\u30a1\u30a4\u30eb\u5909\u66f4\u691c\u77e5<\/strong>: \u30d5\u30a1\u30a4\u30eb\u306e\u6700\u7d42\u66f4\u65b0\u6642\u523b\u3092\u78ba\u8a8d<\/li>\n\n\n\n<li><strong>\u660e\u793a\u7684\u306a\u7121\u52b9\u5316<\/strong>: \u7279\u5b9a\u306e\u30a4\u30d9\u30f3\u30c8\uff08\u66f4\u65b0\u64cd\u4f5c\u306a\u3069\uff09\u6642\u306b\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30af\u30ea\u30a2<\/li>\n\n\n\n<li><strong>\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0<\/strong>: \u30ad\u30e3\u30c3\u30b7\u30e5\u30ad\u30fc\u306b\u30d0\u30fc\u30b8\u30e7\u30f3\u60c5\u5831\u3092\u542b\u3081\u308b<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d5\u30a1\u30a4\u30eb\u5909\u66f4\u6642\u306b\u81ea\u52d5\u7684\u306b\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u66f4\u65b0\u3059\u308b\u4f8b\nfunction getCachedConfigWithAutoRefresh($configPath) {\n    static $cachedConfig = null;\n    static $lastChecked = 0;\n    static $lastModified = 0;\n    \n    \/\/ 5\u79d2\u306b\u4e00\u5ea6\u3060\u3051\u30d5\u30a1\u30a4\u30eb\u306e\u5909\u66f4\u3092\u30c1\u30a7\u30c3\u30af\uff08\u904e\u5270\u306astat\u547c\u3073\u51fa\u3057\u3092\u9632\u3050\uff09\n    $now = time();\n    if ($cachedConfig !== null &amp;&amp; ($now - $lastChecked) &lt; 5) {\n        return $cachedConfig;\n    }\n    \n    $lastChecked = $now;\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u6700\u7d42\u66f4\u65b0\u6642\u523b\u3092\u53d6\u5f97\n    $stat = stat($configPath);\n    $currentModified = $stat['mtime'];\n    \n    \/\/ \u5909\u66f4\u304c\u306a\u3051\u308c\u3070\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u8fd4\u3059\n    if ($cachedConfig !== null &amp;&amp; $lastModified == $currentModified) {\n        return $cachedConfig;\n    }\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u304c\u5909\u66f4\u3055\u308c\u3066\u3044\u308c\u3070\u518d\u8aad\u307f\u8fbc\u307f\n    $lastModified = $currentModified;\n    $cachedConfig = json_decode(file_get_contents($configPath), true);\n    \n    return $cachedConfig;\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-79\">\u72b6\u6cc1\u306b\u5fdc\u3058\u305f\u6700\u9069\u306a\u8aad\u307f\u8fbc\u307f\u95a2\u6570\u306e\u9078\u629e\u57fa\u6e96<\/h3>\n\n\n\n<p>PHP\u306b\u306f\u8907\u6570\u306e\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u95a2\u6570\u304c\u3042\u308a\u3001\u305d\u308c\u305e\u308c\u306b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u7279\u6027\u304c\u7570\u306a\u308a\u307e\u3059\u3002\u7528\u9014\u306b\u5fdc\u3058\u3066\u6700\u9069\u306a\u95a2\u6570\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-80\">\u4e3b\u8981\u95a2\u6570\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u7279\u6027<\/h4>\n\n\n<div id=\"id-11b2e0d2-8e3b-4ee2-8c5b-e77adfddad20\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u95a2\u6570<\/th><th>\u5c0f\u30d5\u30a1\u30a4\u30eb<\/th><th>\u5927\u30d5\u30a1\u30a4\u30eb<\/th><th>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf<\/th><th>\u4f7f\u7528\u30b7\u30fc\u30f3<\/th><\/tr><\/thead><tbody><tr><td><code>file_get_contents()<\/code><\/td><td>\u9ad8\u901f<\/td><td>\u4f4e\u901f\uff08\u30e1\u30e2\u30ea\u5236\u9650\uff09<\/td><td>\u9ad8\u3044\uff08\u5168\u4f53\u3092\u8aad\u307f\u8fbc\u3080\uff09<\/td><td>\u5c0f\u301c\u4e2d\u898f\u6a21\u30d5\u30a1\u30a4\u30eb\u306e\u5358\u7d14\u306a\u8aad\u307f\u8fbc\u307f<\/td><\/tr><tr><td><code>fopen()<\/code>+<code>fread()<\/code>+<code>fclose()<\/code><\/td><td>\u3084\u3084\u4f4e\u901f<\/td><td>\u9ad8\u901f\uff08\u30c1\u30e3\u30f3\u30af\u51e6\u7406\u53ef\u80fd\uff09<\/td><td>\u4f4e\u3044\uff08\u5236\u5fa1\u53ef\u80fd\uff09<\/td><td>\u5927\u898f\u6a21\u30d5\u30a1\u30a4\u30eb\u3001\u30b9\u30c8\u30ea\u30fc\u30e0\u51e6\u7406<\/td><\/tr><tr><td><code>readfile()<\/code><\/td><td>\u9ad8\u901f<\/td><td>\u4e2d\u901f<\/td><td>\u4e2d\u7a0b\u5ea6\uff08\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\uff09<\/td><td>\u5185\u5bb9\u3092\u305d\u306e\u307e\u307e\u51fa\u529b<\/td><\/tr><tr><td><code>file()<\/code><\/td><td>\u4e2d\u901f<\/td><td>\u4f4e\u901f<\/td><td>\u9ad8\u3044\uff08\u914d\u5217\u4fdd\u6301\uff09<\/td><td>\u884c\u5358\u4f4d\u51e6\u7406\u304c\u5fc5\u8981\u306a\u5834\u5408<\/td><\/tr><tr><td><code>include<\/code>\/<code>require<\/code><\/td><td>\u6700\u901f<\/td><td>\u975e\u63a8\u5968<\/td><td>\u5909\u6570\u306b\u3088\u308b<\/td><td>PHP\u30b3\u30fc\u30c9\u306e\u8aad\u307f\u8fbc\u307f<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-81\">\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u306b\u3088\u308b\u9078\u629e\u57fa\u6e96<\/h4>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u306f\u95a2\u6570\u9078\u629e\u306e\u91cd\u8981\u306a\u57fa\u6e96\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5c0f\u3055\u306a\u30d5\u30a1\u30a4\u30eb\uff08\u301c1MB\uff09<\/strong>: <code>file_get_contents()<\/code>\u304c\u6700\u3082\u30b7\u30f3\u30d7\u30eb\u3067\u9ad8\u901f<\/li>\n\n\n\n<li><strong>\u4e2d\u898f\u6a21\u30d5\u30a1\u30a4\u30eb\uff081MB\u301c10MB\uff09<\/strong>: \u7528\u9014\u306b\u5fdc\u3058\u3066<code>file_get_contents()<\/code>\u304b<code>fopen()\/fread()<\/code><\/li>\n\n\n\n<li><strong>\u5927\u898f\u6a21\u30d5\u30a1\u30a4\u30eb\uff0810MB\u301c\uff09<\/strong>: <code>fopen()\/fread()<\/code>\u3092\u4f7f\u3063\u305f\u30c1\u30e3\u30f3\u30af\u51e6\u7406\u304c\u5fc5\u9808<\/li>\n\n\n\n<li><strong>\u975e\u5e38\u306b\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\uff08100MB\u301c\uff09<\/strong>: <code>fopen()\/fread()<\/code>\u3068\u5206\u5272\u51e6\u7406\u306e\u7d44\u307f\u5408\u308f\u305b<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u306b\u5fdc\u3058\u305f\u6700\u9069\u306a\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5\u3092\u9078\u629e\nfunction smartReadFile($filePath) {\n    $fileSize = filesize($filePath);\n    \n    \/\/ 1MB\u4ee5\u4e0b\u306e\u5c0f\u3055\u306a\u30d5\u30a1\u30a4\u30eb\n    if ($fileSize &lt;= 1024 * 1024) {\n        return file_get_contents($filePath);\n    }\n    \n    \/\/ 10MB\u4ee5\u4e0b\u306e\u4e2d\u898f\u6a21\u30d5\u30a1\u30a4\u30eb\n    if ($fileSize &lt;= 10 * 1024 * 1024) {\n        \/\/ \u884c\u5358\u4f4d\u51e6\u7406\u304c\u5fc5\u8981\u304b\u3069\u3046\u304b\u3067\u9078\u629e\n        $extension = strtolower(pathinfo($filePath, PATHINFO_EXTENSION));\n        if (in_array($extension, ['txt', 'log', 'csv'])) {\n            return file($filePath, FILE_IGNORE_NEW_LINES);\n        } else {\n            return file_get_contents($filePath);\n        }\n    }\n    \n    \/\/ 10MB\u8d85\u306e\u5927\u898f\u6a21\u30d5\u30a1\u30a4\u30eb\n    $content = '';\n    $handle = fopen($filePath, 'r');\n    if ($handle) {\n        $chunkSize = 1024 * 1024; \/\/ 1MB\u305a\u3064\u8aad\u307f\u8fbc\u3080\n        while (!feof($handle)) {\n            $content .= fread($handle, $chunkSize);\n        }\n        fclose($handle);\n    }\n    \n    return $content;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-82\">\u4f7f\u7528\u30b1\u30fc\u30b9\u5225\u306e\u63a8\u5968\u95a2\u6570<\/h4>\n\n\n\n<p>\u7279\u5b9a\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u5bfe\u3059\u308b\u63a8\u5968\u95a2\u6570\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb<\/strong>: <code>file_get_contents()<\/code> + JSON\/YAML\u89e3\u6790<\/li>\n\n\n\n<li><strong>\u30ed\u30b0\u89e3\u6790<\/strong>: <code>fopen()<\/code> + <code>fgets()<\/code> \u306b\u3088\u308b\u884c\u5358\u4f4d\u51e6\u7406<\/li>\n\n\n\n<li><strong>CSV\u30a4\u30f3\u30dd\u30fc\u30c8<\/strong>: <code>fopen()<\/code> + <code>fgetcsv()<\/code> \u306b\u3088\u308b\u884c\u5358\u4f4d\u51e6\u7406<\/li>\n\n\n\n<li><strong>\u753b\u50cf\u51e6\u7406<\/strong>: <code>fopen()<\/code> + <code>fread()<\/code>\u306b\u3088\u308b\u30d0\u30a4\u30ca\u30ea\u51e6\u7406<\/li>\n\n\n\n<li><strong>PHP\u30b9\u30af\u30ea\u30d7\u30c8<\/strong>: <code>include<\/code>\/<code>require<\/code>\uff08\u30b3\u30fc\u30c9\u5b9f\u884c\uff09<\/li>\n\n\n\n<li><strong>\u30d5\u30a1\u30a4\u30eb\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/strong>: <code>readfile()<\/code>\uff08\u76f4\u63a5\u51fa\u529b\uff09<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-83\">\u5b9f\u6e2c\u30c7\u30fc\u30bf\u3067\u898b\u308b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6bd4\u8f03\u3068\u6700\u9069\u5316\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<p>\u5b9f\u969b\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u30c7\u30fc\u30bf\u3092\u57fa\u306b\u3001\u69d8\u3005\u306a\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6bd4\u8f03\u3057\u3001\u6700\u9069\u5316\u306e\u30dd\u30a4\u30f3\u30c8\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-84\">\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u624b\u6cd5<\/h4>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6e2c\u5b9a\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b3\u30fc\u30c9\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u95a2\u6570\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\nfunction benchmarkFileReading($filePath, $iterations = 10) {\n    $results = [];\n    \n    \/\/ file_get_contents\n    $startTime = microtime(true);\n    for ($i = 0; $i &lt; $iterations; $i++) {\n        $content = file_get_contents($filePath);\n        \/\/ \u30e1\u30e2\u30ea\u4f7f\u7528\u3092\u9632\u6b62\u3059\u308b\u305f\u3081\u5909\u6570\u3092\u89e3\u653e\n        unset($content);\n    }\n    $endTime = microtime(true);\n    $results['file_get_contents'] = [\n        'time' =&gt; ($endTime - $startTime) \/ $iterations,\n        'memory' =&gt; memory_get_peak_usage() \/ 1024 \/ 1024\n    ];\n    \n    \/\/ reset memory\n    gc_collect_cycles();\n    \n    \/\/ fopen + fread + fclose\n    $startTime = microtime(true);\n    for ($i = 0; $i &lt; $iterations; $i++) {\n        $handle = fopen($filePath, 'r');\n        $content = '';\n        while (!feof($handle)) {\n            $content .= fread($handle, 8192);\n        }\n        fclose($handle);\n        unset($content);\n    }\n    $endTime = microtime(true);\n    $results['fopen_fread'] = [\n        'time' =&gt; ($endTime - $startTime) \/ $iterations,\n        'memory' =&gt; memory_get_peak_usage() \/ 1024 \/ 1024\n    ];\n    \n    \/\/ \u305d\u306e\u4ed6\u306e\u95a2\u6570\u3082\u540c\u69d8\u306b\u6e2c\u5b9a...\n    \n    return $results;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-85\">\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u7d50\u679c<\/h4>\n\n\n\n<p>\u4ee5\u4e0b\u306f\u3001\u69d8\u3005\u306a\u30b5\u30a4\u30ba\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u7570\u306a\u308b\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5\u3092\u6bd4\u8f03\u3057\u305f\u7d50\u679c\u306e\u4f8b\u3067\u3059\uff1a<\/p>\n\n\n<div id=\"id-96d97bd0-dd55-4dc4-b4fe-66ead75e1eda\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba<\/th><th>\u95a2\u6570<\/th><th>\u5e73\u5747\u5b9f\u884c\u6642\u9593 (\u79d2)<\/th><th>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf (MB)<\/th><\/tr><\/thead><tbody><tr><td>100KB<\/td><td>file_get_contents()<\/td><td>0.0005<\/td><td>0.25<\/td><\/tr><tr><td>100KB<\/td><td>fopen()\/fread()<\/td><td>0.0012<\/td><td>0.15<\/td><\/tr><tr><td>100KB<\/td><td>readfile()<\/td><td>0.0004<\/td><td>0.12<\/td><\/tr><tr><td>1MB<\/td><td>file_get_contents()<\/td><td>0.004<\/td><td>2.1<\/td><\/tr><tr><td>1MB<\/td><td>fopen()\/fread()<\/td><td>0.008<\/td><td>0.8<\/td><\/tr><tr><td>1MB<\/td><td>readfile()<\/td><td>0.003<\/td><td>0.9<\/td><\/tr><tr><td>10MB<\/td><td>file_get_contents()<\/td><td>0.05<\/td><td>20.5<\/td><\/tr><tr><td>10MB<\/td><td>fopen()\/fread()<\/td><td>0.06<\/td><td>1.2<\/td><\/tr><tr><td>10MB<\/td><td>readfile()<\/td><td>0.04<\/td><td>1.0<\/td><\/tr><tr><td>50MB<\/td><td>file_get_contents()<\/td><td>0.38<\/td><td>\u30e1\u30e2\u30ea\u4e0d\u8db3\u30a8\u30e9\u30fc<\/td><\/tr><tr><td>50MB<\/td><td>fopen()\/fread()<\/td><td>0.25<\/td><td>1.5<\/td><\/tr><tr><td>50MB<\/td><td>readfile()<\/td><td>0.20<\/td><td>2.1<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p><em>\u6ce8: \u3053\u308c\u3089\u306e\u5024\u306f\u74b0\u5883\u306b\u3088\u3063\u3066\u7570\u306a\u308a\u307e\u3059\u3002\u81ea\u8eab\u306e\u74b0\u5883\u3067\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u3092\u5b9f\u65bd\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002<\/em><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-86\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30dd\u30a4\u30f3\u30c8<\/h4>\n\n\n\n<p>\u5b9f\u969b\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u3068\u5b9f\u8df5\u7684\u306a\u7d4c\u9a13\u304b\u3089\u5c0e\u304d\u51fa\u3055\u308c\u305f\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30dd\u30a4\u30f3\u30c8\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u9069\u5207\u306a\u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba\u306e\u9078\u629e<\/strong>:<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ fread()\u306e\u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba\u306e\u6700\u9069\u5316\n\/\/ \u5c0f\u3055\u3059\u304e\u308b\u3068\u95a2\u6570\u547c\u3073\u51fa\u3057\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u304c\u5897\u52a0\n\/\/ \u5927\u304d\u3059\u304e\u308b\u3068\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u304c\u5897\u3048\u308b\n$optimalBufferSize = 8192; \/\/ 8KB\uff08\u591a\u304f\u306e\u5834\u5408\u306e\u6700\u9069\u5024\uff09\n$content = '';\nwhile (!feof($handle)) {\n    $content .= fread($handle, $optimalBufferSize);\n}<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30b9\u30c8\u30ea\u30fc\u30e0\u51e6\u7406\u306e\u6d3b\u7528<\/strong>:<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u51e6\u7406\u3057\u306a\u304c\u3089\u8aad\u307f\u8fbc\u3080\uff08\u4e2d\u9593\u30d0\u30c3\u30d5\u30a1\u3092\u6e1b\u3089\u3059\uff09\n$handle = fopen('large_log.txt', 'r');\n$count = 0;\nwhile (($line = fgets($handle)) !== false) {\n    $count += processLine($line); \/\/ \u5373\u6642\u51e6\u7406\n    \/\/ $line\u5909\u6570\u306f\u6b21\u306e\u30eb\u30fc\u30d7\u3067\u4e0a\u66f8\u304d\u3055\u308c\u308b\u306e\u3067\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u52b9\u7387\u304c\u826f\u3044\n}\nfclose($handle);<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u4e8b\u524d\u4f5c\u6210<\/strong>:<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u52b9\u7387\u7684\u306b\u691c\u7d22\u3059\u308b\u305f\u3081\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u4f5c\u6210\nfunction createFileIndex($filePath) {\n    $handle = fopen($filePath, 'r');\n    $index = [];\n    $position = 0;\n    $lineNumber = 0;\n\n    while (($line = fgets($handle)) !== false) {\n        $lineNumber++;\n        \/\/ \u4f8b\uff1a\u7279\u5b9a\u306e\u30d1\u30bf\u30fc\u30f3\u3067\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u5316\n        if (preg_match('\/ERROR|WARNING|CRITICAL\/', $line)) {\n            $index[] = [\n                'position' =&gt; $position,\n                'line' =&gt; $lineNumber,\n                'type' =&gt; preg_match('\/ERROR\/', $line) ? 'error' :\n                        (preg_match('\/WARNING\/', $line) ? 'warning' : 'critical')\n            ];\n        }\n        $position = ftell($handle);\n    }\n\n    fclose($handle);\n    return $index;\n}<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u4e26\u5217\u51e6\u7406\u306e\u6d3b\u7528<\/strong>:<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5927\u898f\u6a21\u30d5\u30a1\u30a4\u30eb\u306e\u4e26\u5217\u51e6\u7406\uff08\u7591\u4f3c\u30b3\u30fc\u30c9\uff09\nfunction processMassiveFileInParallel($filePath, $workerCount = 4) {\n    $fileSize = filesize($filePath);\n    $chunkSize = ceil($fileSize \/ $workerCount);\n\n    $results = [];\n    for ($i = 0; $i &lt; $workerCount; $i++) {\n        $start = $i * $chunkSize;\n        $length = min($chunkSize, $fileSize - $start);\n\n        \/\/ \u4e26\u5217\u51e6\u7406\u3092\u958b\u59cb\uff08\u5b9f\u969b\u306e\u5b9f\u88c5\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u3088\u308b\uff09\n        $results[] = startWorker([\n            'file' =&gt; $filePath,\n            'start' =&gt; $start,\n            'length' =&gt; $length\n        ]);\n    }\n\n    \/\/ \u7d50\u679c\u3092\u96c6\u7d04\n    return mergeResults($results);\n}<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/strong>:<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u9023\u7d9a\u3057\u305f\u8aad\u307f\u8fbc\u307f\u3067OS\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6d3b\u7528\nfunction processFileMultipleTimes($filePath, $passes) {\n    \/\/ 1\u56de\u76ee\u306e\u8aad\u307f\u8fbc\u307f\u306f\u30c7\u30a3\u30b9\u30afI\/O\u3092\u4f34\u3046\u304c\u3001\n    \/\/ \u4ee5\u964d\u306e\u8aad\u307f\u8fbc\u307f\u306fOS\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u9ad8\u901f\u306b\u53d6\u5f97\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u9ad8\u3044\n    for ($i = 0; $i &lt; $passes; $i++) {\n        $content = file_get_contents($filePath);\n        processingPass($content, $i);\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-87\">\u5b9f\u969b\u306e\u958b\u767a\u306b\u304a\u3051\u308b\u30c8\u30ec\u30fc\u30c9\u30aa\u30d5<\/h4>\n\n\n\n<p>\u5b9f\u969b\u306e\u958b\u767a\u3067\u306f\u3001\u5358\u7d14\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3060\u3051\u3067\u306a\u304f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30c8\u30ec\u30fc\u30c9\u30aa\u30d5\u3092\u8003\u616e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf vs \u51e6\u7406\u901f\u5ea6<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u30e1\u30e2\u30ea\u306b\u4f59\u88d5\u304c\u3042\u308b\u74b0\u5883\u3067\u306f<code>file_get_contents()<\/code>\u304c\u5358\u7d14\u3067\u901f\u3044<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u5236\u9650\u304c\u3042\u308b\u74b0\u5883\u3067\u306f<code>fread()<\/code>\u306b\u3088\u308b\u30c1\u30e3\u30f3\u30af\u51e6\u7406\u304c\u5fc5\u8981<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30b3\u30fc\u30c9\u306e\u8907\u96d1\u3055 vs \u6700\u9069\u5316<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u5358\u7d14\u306a\u30b3\u30fc\u30c9\u3092\u7dad\u6301\u3059\u308b\u304b\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u5927\u5316\u3059\u308b\u304b<\/li>\n\n\n\n<li>\u958b\u767a\u6642\u9593\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a\u306e\u30d0\u30e9\u30f3\u30b9<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u6c4e\u7528\u6027 vs \u7279\u5316<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u69d8\u3005\u306a\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u306b\u5bfe\u5fdc\u3059\u308b\u6c4e\u7528\u7684\u306a\u5b9f\u88c5\u304b<\/li>\n\n\n\n<li>\u7279\u5b9a\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u6700\u9069\u5316\u3055\u308c\u305f\u5b9f\u88c5\u304b<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u3068\u306a\u308b\u90e8\u5206\u3092\u7279\u5b9a\u3057\u3001\u305d\u3053\u306b\u6700\u9069\u5316\u52aa\u529b\u3092\u96c6\u4e2d\u3055\u305b\u308b\u3053\u3068\u304c\u52b9\u7387\u7684\u3067\u3059\u3002PHP\u306e\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u30c4\u30fc\u30eb\uff08Xdebug\u3001XHProf\u3001Blackfire\u306a\u3069\uff09\u3092\u4f7f\u7528\u3057\u3066\u3001\u5b9f\u969b\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c7\u30fc\u30bf\u3092\u53ce\u96c6\u3057\u3001\u79d1\u5b66\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3067\u6700\u9069\u5316\u3092\u884c\u3046\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u958b\u767a\u74b0\u5883\u3067\u306e\u7c21\u6613\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u4f8b\nfunction profileFileOperation($callback, $label) {\n    $startTime = microtime(true);\n    $startMemory = memory_get_usage();\n    \n    $result = $callback();\n    \n    $endTime = microtime(true);\n    $endMemory = memory_get_usage();\n    \n    echo \"$label: \" . PHP_EOL;\n    echo \"  \u6642\u9593: \" . number_format(($endTime - $startTime) * 1000, 2) . \" ms\" . PHP_EOL;\n    echo \"  \u30e1\u30e2\u30ea: \" . number_format(($endMemory - $startMemory) \/ 1024, 2) . \" KB\" . PHP_EOL;\n    \n    return $result;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$content = profileFileOperation(function() {\n    return file_get_contents('config.json');\n}, 'file_get_contents');\n\n$content = profileFileOperation(function() {\n    $handle = fopen('config.json', 'r');\n    $content = '';\n    while (!feof($handle)) {\n        $content .= fread($handle, 8192);\n    }\n    fclose($handle);\n    return $content;\n}, 'fopen+fread');\n<\/pre>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306f\u3001\u5358\u4e00\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u3067\u5168\u3066\u306e\u30b1\u30fc\u30b9\u306b\u5bfe\u5fdc\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8981\u4ef6\u3001\u51e6\u7406\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u306e\u6027\u8cea\u3001\u5b9f\u884c\u74b0\u5883\u306e\u5236\u7d04\u3092\u8003\u616e\u3057\u3001\u9069\u5207\u306a\u65b9\u6cd5\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u5c0f\u3055\u306a\u30d5\u30a1\u30a4\u30eb\u3068\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u3001\u5358\u767a\u306e\u51e6\u7406\u3068\u7e70\u308a\u8fd4\u3057\u51e6\u7406\u3067\u306f\u3001\u6700\u9069\u306a\u65b9\u6cd5\u304c\u7570\u306a\u308a\u307e\u3059\u3002\u5e38\u306b\u6e2c\u5b9a\u3068\u691c\u8a3c\u3092\u884c\u3044\u3001\u30c7\u30fc\u30bf\u306b\u57fa\u3065\u3044\u305f\u6700\u9069\u5316\u3092\u884c\u3044\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-88\">\u30ea\u30e2\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f<\/h2>\n\n\n\n<p>PHP\u306e\u5f37\u529b\u306a\u6a5f\u80fd\u306e\u4e00\u3064\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u3060\u3051\u3067\u306a\u304f\u3001\u30ea\u30e2\u30fc\u30c8\u30b5\u30fc\u30d0\u30fc\u4e0a\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u3082\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3053\u3068\u3067\u3059\u3002URL\u7d4c\u7531\u3067\u306e\u30a2\u30af\u30bb\u30b9\u3001FTP\/SFTP\u30d7\u30ed\u30c8\u30b3\u30eb\u306e\u5229\u7528\u3001\u305d\u3057\u3066Web API\u3068\u306e\u9023\u643a\u306a\u3069\u3001\u69d8\u3005\u306a\u65b9\u6cd5\u3067\u30ea\u30e2\u30fc\u30c8\u30ea\u30bd\u30fc\u30b9\u3092\u53d6\u5f97\u30fb\u51e6\u7406\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30ea\u30e2\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u5b89\u5168\u304b\u3064\u52b9\u7387\u7684\u306b\u8aad\u307f\u8fbc\u3080\u305f\u3081\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-89\">URL\u7d4c\u7531\u3067\u30ea\u30e2\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u65b9\u6cd5<\/h3>\n\n\n\n<p>PHP\u3067\u306f\u3001<code>file_get_contents()<\/code>\u3084<code>fopen()<\/code>\u306a\u3069\u306e\u95a2\u6570\u3092\u4f7f\u3063\u3066\u3001HTTP\/HTTPS\u7d4c\u7531\u3067\u30ea\u30e2\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-90\">\u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u7684\u306aURL\u7d4c\u7531\u306e\u30d5\u30a1\u30a4\u30eb\u53d6\u5f97\n$url = 'https:\/\/example.com\/data.json';\n$content = file_get_contents($url);\n\nif ($content === false) {\n    echo \"\u30ea\u30e2\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u53d6\u5f97\u306b\u5931\u6557\u3057\u307e\u3057\u305f\";\n} else {\n    \/\/ \u53d6\u5f97\u3057\u305f\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u51e6\u7406\n    $data = json_decode($content, true);\n    print_r($data);\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-91\">allow_url_fopen\u8a2d\u5b9a<\/h4>\n\n\n\n<p>\u30ea\u30e2\u30fc\u30c8URL\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306b\u306f\u3001PHP\u306e<code>allow_url_fopen<\/code>\u8a2d\u5b9a\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ allow_url_fopen\u304c\u6709\u52b9\u304b\u30c1\u30a7\u30c3\u30af\nif (!ini_get('allow_url_fopen')) {\n    echo \"\u3053\u306e\u30b5\u30fc\u30d0\u30fc\u3067\u306fallow_url_fopen\u304c\u7121\u52b9\u3067\u3059\u3002\u30ea\u30e2\u30fc\u30c8URL\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093\u3002\";\n    \/\/ \u4ee3\u66ff\u624b\u6bb5\u3068\u3057\u3066cURL\u3092\u4f7f\u7528\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-92\">HTTP\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/h4>\n\n\n\n<p>\u3088\u308a\u9ad8\u5ea6\u306a\u5236\u5fa1\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u30b9\u30c8\u30ea\u30fc\u30e0\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ HTTP\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\n$context = stream_context_create([\n    'http' =&gt; [\n        'method' =&gt; 'GET',\n        'header' =&gt; [\n            'User-Agent: PHPScript\/1.0',\n            'Accept: application\/json',\n            'Authorization: Bearer ' . $apiToken\n        ],\n        'timeout' =&gt; 30,        \/\/ 30\u79d2\u3067\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\n        'follow_location' =&gt; 1, \/\/ \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3092\u8ffd\u8de1\n        'max_redirects' =&gt; 3,   \/\/ \u6700\u5927\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u56de\u6570\n        'ignore_errors' =&gt; true \/\/ \u30a8\u30e9\u30fc\u30ec\u30b9\u30dd\u30f3\u30b9\uff084xx\/5xx\uff09\u3082\u53d6\u5f97\n    ]\n]);\n\n$content = file_get_contents($url, false, $context);\n\n\/\/ \u30ec\u30b9\u30dd\u30f3\u30b9\u30d8\u30c3\u30c0\u30fc\u306e\u53d6\u5f97\n$responseHeaders = $http_response_header ?? [];\n$statusCode = 0;\n\n\/\/ \u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9\u3092\u62bd\u51fa\nforeach ($responseHeaders as $header) {\n    if (preg_match('\/^HTTP\\\/\\d\\.\\d\\s+(\\d+)\/', $header, $matches)) {\n        $statusCode = intval($matches[1]);\n        break;\n    }\n}\n\nif ($statusCode &gt;= 400) {\n    echo \"\u30a8\u30e9\u30fc\u30ec\u30b9\u30dd\u30f3\u30b9: $statusCode\" . PHP_EOL;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-93\">\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u51e6\u7406\u3068\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/h4>\n\n\n\n<p>\u30ea\u30e2\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306f\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u72b6\u6cc1\u306b\u4f9d\u5b58\u3059\u308b\u305f\u3081\u3001\u9069\u5207\u306a\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a\u3068\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3068\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\nfunction getRemoteContentWithTimeout($url, $timeout = 5) {\n    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a\n    $defaultSocketTimeout = ini_get('default_socket_timeout');\n    ini_set('default_socket_timeout', $timeout);\n    \n    \/\/ \u30a8\u30e9\u30fc\u8868\u793a\u3092\u4e00\u6642\u7684\u306b\u7121\u52b9\u5316\n    $errorReporting = error_reporting(0);\n    \n    try {\n        $context = stream_context_create([\n            'http' =&gt; ['timeout' =&gt; $timeout]\n        ]);\n        \n        $content = file_get_contents($url, false, $context);\n        \n        if ($content === false) {\n            \/\/ \u30a8\u30e9\u30fc\u767a\u751f\u6642\u306e\u30ec\u30b9\u30dd\u30f3\u30b9\u30d8\u30c3\u30c0\u30fc\u3092\u30c1\u30a7\u30c3\u30af\n            if (isset($http_response_header)) {\n                foreach ($http_response_header as $header) {\n                    if (preg_match('\/^HTTP\\\/\\d\\.\\d\\s+(\\d+)\/', $header, $matches)) {\n                        $statusCode = intval($matches[1]);\n                        if ($statusCode &gt;= 400) {\n                            throw new Exception(\"HTTP\u30a8\u30e9\u30fc: $statusCode\");\n                        }\n                    }\n                }\n            }\n            \n            throw new Exception(\"\u30ea\u30e2\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u53d6\u5f97\u306b\u5931\u6557\u3057\u307e\u3057\u305f\");\n        }\n        \n        return $content;\n    } catch (Exception $e) {\n        \/\/ \u30ed\u30b0\u306b\u8a18\u9332\n        error_log(\"\u30ea\u30e2\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u53d6\u5f97\u30a8\u30e9\u30fc ($url): \" . $e-&gt;getMessage());\n        return false;\n    } finally {\n        \/\/ \u8a2d\u5b9a\u3092\u5143\u306b\u623b\u3059\n        ini_set('default_socket_timeout', $defaultSocketTimeout);\n        error_reporting($errorReporting);\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$content = getRemoteContentWithTimeout('https:\/\/api.example.com\/large-file.zip', 60);\nif ($content === false) {\n    echo \"\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u307e\u305f\u306f\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\";\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-94\">FTP\u7d4c\u7531\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u3068\u30bb\u30ad\u30e5\u30a2\u901a\u4fe1<\/h3>\n\n\n\n<p>FTP\u30d7\u30ed\u30c8\u30b3\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001FTP\u30b5\u30fc\u30d0\u30fc\u4e0a\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u76f4\u63a5\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002PHP\u306b\u306f\u7d44\u307f\u8fbc\u307f\u306eFTP\u95a2\u6570\u30bb\u30c3\u30c8\u304c\u3042\u308a\u3001\u3088\u308a\u8a73\u7d30\u306a\u5236\u5fa1\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-95\">\u57fa\u672c\u7684\u306aFTP\u30a2\u30af\u30bb\u30b9<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ FTP\u63a5\u7d9a\u3068\u8a8d\u8a3c\n$ftpServer = 'ftp.example.com';\n$ftpUser = 'username';\n$ftpPass = 'password';\n$remotePath = '\/path\/to\/remote\/file.txt';\n$localPath = 'downloaded_file.txt';\n\n\/\/ \u63a5\u7d9a\u3092\u78ba\u7acb\n$conn = ftp_connect($ftpServer);\nif ($conn === false) {\n    die(\"FTP\u30b5\u30fc\u30d0\u30fc\u3078\u306e\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3057\u305f\");\n}\n\n\/\/ \u30ed\u30b0\u30a4\u30f3\nif (!ftp_login($conn, $ftpUser, $ftpPass)) {\n    ftp_close($conn);\n    die(\"FTP\u8a8d\u8a3c\u306b\u5931\u6557\u3057\u307e\u3057\u305f\");\n}\n\n\/\/ \u30d1\u30c3\u30b7\u30d6\u30e2\u30fc\u30c9\u3092\u6709\u52b9\u5316\uff08\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u5bfe\u7b56\uff09\nftp_pasv($conn, true);\n\n\/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\nif (ftp_get($conn, $localPath, $remotePath, FTP_BINARY)) {\n    echo \"\u30d5\u30a1\u30a4\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306b\u6210\u529f\u3057\u307e\u3057\u305f\";\n    \n    \/\/ \u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u307f\n    $content = file_get_contents($localPath);\n    \/\/ \u51e6\u7406...\n    \n    \/\/ \u5fc5\u8981\u306b\u5fdc\u3058\u3066\u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\n    unlink($localPath);\n} else {\n    echo \"\u30d5\u30a1\u30a4\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f\";\n}\n\n\/\/ \u63a5\u7d9a\u3092\u9589\u3058\u308b\nftp_close($conn);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-96\">\u30b9\u30c8\u30ea\u30fc\u30e0\u30e9\u30c3\u30d1\u30fc\u3092\u4f7f\u3063\u305fFTP\u30a2\u30af\u30bb\u30b9<\/h4>\n\n\n\n<p>PHP\u306e\u30b9\u30c8\u30ea\u30fc\u30e0\u30e9\u30c3\u30d1\u30fc\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001FTP\u30a2\u30af\u30bb\u30b9\u3092\u3088\u308a\u7c21\u6f54\u306b\u8a18\u8ff0\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b9\u30c8\u30ea\u30fc\u30e0\u30e9\u30c3\u30d1\u30fc\u3092\u4f7f\u3063\u305fFTP\u30a2\u30af\u30bb\u30b9\n$ftpUrl = 'ftp:\/\/username:password@ftp.example.com\/path\/to\/remote\/file.txt';\n\n\/\/ allow_url_fopen\u304c\u6709\u52b9\u3067\u3042\u308b\u3053\u3068\u304c\u524d\u63d0\n$content = file_get_contents($ftpUrl);\nif ($content !== false) {\n    echo \"\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9: \" . substr($content, 0, 100) . \"...\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-97\">SFTP\u3067\u306e\u30bb\u30ad\u30e5\u30a2\u901a\u4fe1<\/h4>\n\n\n\n<p>\u6a19\u6e96\u306eFTP\u306f\u6697\u53f7\u5316\u3055\u308c\u306a\u3044\u305f\u3081\u3001\u30bb\u30ad\u30e5\u30a2\u306a\u901a\u4fe1\u306b\u306fSFTP\uff08SSH File Transfer Protocol\uff09\u3092\u4f7f\u7528\u3059\u3079\u304d\u3067\u3059\u3002PHP\u3067SFTP\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001SSH2\u62e1\u5f35\u6a5f\u80fd\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ SSH2\u62e1\u5f35\u6a5f\u80fd\u3092\u4f7f\u3063\u305fSFTP\u30a2\u30af\u30bb\u30b9\nif (!extension_loaded('ssh2')) {\n    die(\"SSH2\u62e1\u5f35\u6a5f\u80fd\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u307e\u305b\u3093\");\n}\n\n\/\/ SSH\u63a5\u7d9a\u3092\u78ba\u7acb\n$connection = ssh2_connect('sftp.example.com', 22);\nif (!$connection) {\n    die(\"SSH\u30b5\u30fc\u30d0\u30fc\u3078\u306e\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3057\u305f\");\n}\n\n\/\/ \u8a8d\u8a3c\nif (!ssh2_auth_password($connection, 'username', 'password')) {\n    die(\"SSH\u8a8d\u8a3c\u306b\u5931\u6557\u3057\u307e\u3057\u305f\");\n}\n\n\/\/ SFTP\u30b5\u30d6\u30b7\u30b9\u30c6\u30e0\u3092\u521d\u671f\u5316\n$sftp = ssh2_sftp($connection);\nif (!$sftp) {\n    die(\"SFTP\u30b5\u30d6\u30b7\u30b9\u30c6\u30e0\u306e\u521d\u671f\u5316\u306b\u5931\u6557\u3057\u307e\u3057\u305f\");\n}\n\n\/\/ SFTP\u30b9\u30c8\u30ea\u30fc\u30e0\u30e9\u30c3\u30d1\u30fc\u3092\u4f7f\u3063\u3066\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080\n$sftpStream = \"ssh2.sftp:\/\/$sftp\/path\/to\/remote\/file.txt\";\n$content = file_get_contents($sftpStream);\n\nif ($content !== false) {\n    echo \"\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9: \" . substr($content, 0, 100) . \"...\";\n} else {\n    echo \"\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-98\">FTP\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<p>\u8907\u6570\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u5834\u5408\u306f\u3001\u63a5\u7d9a\u3092\u518d\u5229\u7528\u3059\u308b\u3053\u3068\u3067\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u8907\u6570\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3059\u308b\u6700\u9069\u5316\u3055\u308c\u305fFTP\u30af\u30e9\u30b9\nclass FTPClient {\n    private $connection;\n    private $isConnected = false;\n    \n    public function __construct($server, $username, $password) {\n        $this-&gt;connection = ftp_connect($server);\n        if ($this-&gt;connection === false) {\n            throw new Exception(\"FTP\u30b5\u30fc\u30d0\u30fc\u3078\u306e\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3057\u305f\");\n        }\n        \n        if (!ftp_login($this-&gt;connection, $username, $password)) {\n            ftp_close($this-&gt;connection);\n            throw new Exception(\"FTP\u8a8d\u8a3c\u306b\u5931\u6557\u3057\u307e\u3057\u305f\");\n        }\n        \n        \/\/ \u30d1\u30c3\u30b7\u30d6\u30e2\u30fc\u30c9\u3092\u6709\u52b9\u5316\n        ftp_pasv($this-&gt;connection, true);\n        $this-&gt;isConnected = true;\n    }\n    \n    public function getFileContent($remotePath) {\n        $tempFile = tempnam(sys_get_temp_dir(), 'ftp');\n        \n        if (!ftp_get($this-&gt;connection, $tempFile, $remotePath, FTP_BINARY)) {\n            unlink($tempFile);\n            throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f: $remotePath\");\n        }\n        \n        $content = file_get_contents($tempFile);\n        unlink($tempFile);\n        \n        return $content;\n    }\n    \n    public function __destruct() {\n        if ($this-&gt;isConnected) {\n            ftp_close($this-&gt;connection);\n        }\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\ntry {\n    $ftp = new FTPClient('ftp.example.com', 'username', 'password');\n    \n    \/\/ \u8907\u6570\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\n    $files = ['file1.txt', 'file2.txt', 'file3.txt'];\n    foreach ($files as $file) {\n        $content = $ftp-&gt;getFileContent('\/path\/to\/' . $file);\n        echo \"$file \u306e\u5185\u5bb9: \" . substr($content, 0, 50) . \"...\\n\";\n    }\n} catch (Exception $e) {\n    echo \"\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage();\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-99\">API\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u51e6\u7406\u3059\u308b\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>\u73fe\u4ee3\u306eWeb\u958b\u767a\u3067\u306f\u3001RESTful API\u3084\u305d\u306e\u4ed6\u306eWeb API\u304b\u3089\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3059\u308b\u3053\u3068\u304c\u4e00\u822c\u7684\u3067\u3059\u3002\u3053\u308c\u3089\u306eAPI\u30ec\u30b9\u30dd\u30f3\u30b9\u306f\u3001\u4e00\u6642\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u4fdd\u5b58\u30fb\u51e6\u7406\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-100\">\u57fa\u672c\u7684\u306aAPI\u30ea\u30af\u30a8\u30b9\u30c8<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u7684\u306aAPI\u30ea\u30af\u30a8\u30b9\u30c8\nfunction callAPI($method, $url, $data = [], $headers = []) {\n    $context = stream_context_create([\n        'http' =&gt; [\n            'method' =&gt; $method,\n            'header' =&gt; array_merge([\n                'Content-Type: application\/json',\n                'Accept: application\/json'\n            ], $headers),\n            'content' =&gt; $method !== 'GET' ? json_encode($data) : null,\n            'timeout' =&gt; 30\n        ]\n    ]);\n    \n    $response = file_get_contents($url, false, $context);\n    if ($response === false) {\n        return null;\n    }\n    \n    return json_decode($response, true);\n}\n\n\/\/ \u4f7f\u7528\u4f8b\uff1aJSON\u30c7\u30fc\u30bf\u306e\u53d6\u5f97\n$apiURL = 'https:\/\/api.example.com\/users';\n$data = callAPI('GET', $apiURL);\n\nif ($data !== null) {\n    foreach ($data['users'] as $user) {\n        echo \"\u30e6\u30fc\u30b6\u30fc: \" . $user['name'] . \"\\n\";\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-101\">cURL\u3092\u4f7f\u3063\u305f\u9ad8\u5ea6\u306a\u30ea\u30af\u30a8\u30b9\u30c8<\/h4>\n\n\n\n<p>\u3088\u308a\u9ad8\u5ea6\u306a\u5236\u5fa1\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001cURL\u62e1\u5f35\u6a5f\u80fd\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ cURL\u3092\u4f7f\u3063\u305f\u9ad8\u5ea6\u306aAPI\u30ea\u30af\u30a8\u30b9\u30c8\nfunction callAPIWithCurl($method, $url, $data = [], $headers = [], $options = []) {\n    if (!extension_loaded('curl')) {\n        throw new Exception(\"cURL\u62e1\u5f35\u6a5f\u80fd\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u307e\u305b\u3093\");\n    }\n    \n    $ch = curl_init($url);\n    \n    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u30aa\u30d7\u30b7\u30e7\u30f3\n    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);\n    curl_setopt($ch, CURLOPT_MAXREDIRS, 5);\n    curl_setopt($ch, CURLOPT_TIMEOUT, 30);\n    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);\n    \n    \/\/ \u30e1\u30bd\u30c3\u30c9\u56fa\u6709\u306e\u8a2d\u5b9a\n    switch ($method) {\n        case 'POST':\n            curl_setopt($ch, CURLOPT_POST, true);\n            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));\n            break;\n        case 'PUT':\n            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');\n            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));\n            break;\n        case 'DELETE':\n            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');\n            break;\n        default: \/\/ GET\n            if (!empty($data)) {\n                $url .= '?' . http_build_query($data);\n                curl_setopt($ch, CURLOPT_URL, $url);\n            }\n            break;\n    }\n    \n    \/\/ \u30d8\u30c3\u30c0\u30fc\u8a2d\u5b9a\n    $defaultHeaders = [\n        'Content-Type: application\/json',\n        'Accept: application\/json'\n    ];\n    curl_setopt($ch, CURLOPT_HTTPHEADER, array_merge($defaultHeaders, $headers));\n    \n    \/\/ \u8ffd\u52a0\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\n    foreach ($options as $option =&gt; $value) {\n        curl_setopt($ch, $option, $value);\n    }\n    \n    \/\/ \u30ea\u30af\u30a8\u30b9\u30c8\u5b9f\u884c\n    $response = curl_exec($ch);\n    $error = curl_error($ch);\n    $info = curl_getinfo($ch);\n    curl_close($ch);\n    \n    if ($error) {\n        throw new Exception(\"cURL\u30a8\u30e9\u30fc: $error\");\n    }\n    \n    \/\/ \u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u51e6\u7406\n    return [\n        'status' =&gt; $info['http_code'],\n        'body' =&gt; json_decode($response, true),\n        'headers' =&gt; $info\n    ];\n}\n\n\/\/ \u4f7f\u7528\u4f8b\uff1a\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\ntry {\n    $fileUrl = 'https:\/\/example.com\/large-file.zip';\n    $localFile = 'downloaded.zip';\n    \n    $fp = fopen($localFile, 'w+');\n    \n    $response = callAPIWithCurl('GET', $fileUrl, [], [], [\n        CURLOPT_FILE =&gt; $fp, \/\/ \u51fa\u529b\u3092\u76f4\u63a5\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u3080\n        CURLOPT_BUFFERSIZE =&gt; 131072, \/\/ 128KB \u306e\u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba\n        CURLOPT_NOPROGRESS =&gt; false,\n        CURLOPT_PROGRESSFUNCTION =&gt; function($ch, $dlTotal, $dlNow) {\n            if ($dlTotal &gt; 0) {\n                echo \"\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u9032\u6357: \" . round(($dlNow \/ $dlTotal) * 100, 2) . \"%\\r\";\n            }\n            return 0; \/\/ 0\u3092\u8fd4\u3057\u3066\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3092\u7d99\u7d9a\n        }\n    ]);\n    \n    fclose($fp);\n    echo \"\u30d5\u30a1\u30a4\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3057\u305f: $localFile\\n\";\n    \n} catch (Exception $e) {\n    echo \"\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage();\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-102\">\u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u3063\u305fAPI\u5fdc\u7b54\u306e\u51e6\u7406<\/h4>\n\n\n\n<p>\u5927\u304d\u306aAPI\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u51e6\u7406\u3059\u308b\u5834\u5408\u3001\u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3068\u52b9\u7387\u7684\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u3063\u305fAPI\u5fdc\u7b54\u306e\u51e6\u7406\nfunction processLargeAPIResponse($url) {\n    \/\/ \u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\n    $tempFile = tempnam(sys_get_temp_dir(), 'api');\n    \n    \/\/ cURL\u3092\u4f7f\u3063\u3066\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u306b\u76f4\u63a5\u4fdd\u5b58\n    $ch = curl_init($url);\n    $fp = fopen($tempFile, 'w');\n    \n    curl_setopt($ch, CURLOPT_FILE, $fp);\n    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);\n    curl_setopt($ch, CURLOPT_TIMEOUT, 300); \/\/ 5\u5206\u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\n    \n    curl_exec($ch);\n    curl_close($ch);\n    fclose($fp);\n    \n    \/\/ \u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u30921\u884c\u305a\u3064\u51e6\u7406\n    $result = [];\n    $handle = fopen($tempFile, 'r');\n    if ($handle) {\n        while (($line = fgets($handle)) !== false) {\n            \/\/ \u5404\u884c\u3092\u51e6\u7406\n            if (trim($line) !== '') {\n                $jsonData = json_decode($line, true);\n                if ($jsonData) {\n                    $result[] = processDataItem($jsonData);\n                }\n            }\n        }\n        fclose($handle);\n    }\n    \n    \/\/ \u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\n    unlink($tempFile);\n    \n    return $result;\n}\n\nfunction processDataItem($item) {\n    \/\/ \u30c7\u30fc\u30bf\u30a2\u30a4\u30c6\u30e0\u306e\u51e6\u7406\u30ed\u30b8\u30c3\u30af\n    return $item;\n}\n\n\/\/ API\u304b\u3089\u306e\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u51e6\u7406\nfunction processStreamingAPI($url, $callback) {\n    $ch = curl_init();\n    curl_setopt($ch, CURLOPT_URL, $url);\n    curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $data) use ($callback) {\n        \/\/ \u30c7\u30fc\u30bf\u306e\u533a\u5207\u308a\uff08\u3053\u306e\u4f8b\u3067\u306fJSON Lines\u5f62\u5f0f\u3092\u60f3\u5b9a\uff09\n        $lines = explode(\"\\n\", $data);\n        foreach ($lines as $line) {\n            if (trim($line) !== '') {\n                $item = json_decode($line, true);\n                if ($item) {\n                    $callback($item);\n                }\n            }\n        }\n        return strlen($data);\n    });\n    \n    curl_exec($ch);\n    curl_close($ch);\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nprocessStreamingAPI('https:\/\/api.example.com\/stream', function($item) {\n    echo \"\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30c7\u30fc\u30bf: \" . json_encode($item) . PHP_EOL;\n});\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-103\">API\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565<\/h4>\n\n\n\n<p>\u983b\u7e41\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308bAPI\u30ec\u30b9\u30dd\u30f3\u30b9\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u3053\u3068\u3067\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u3089\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ API\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u5b9f\u88c5\nclass APICacheManager {\n    private $cacheDir;\n    \n    public function __construct($cacheDir = null) {\n        $this-&gt;cacheDir = $cacheDir ?: sys_get_temp_dir() . '\/api_cache';\n        if (!is_dir($this-&gt;cacheDir)) {\n            mkdir($this-&gt;cacheDir, 0755, true);\n        }\n    }\n    \n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30ad\u30fc\u306e\u751f\u6210\n    private function getCacheKey($url, $params = []) {\n        $key = $url;\n        if (!empty($params)) {\n            $key .= '?' . http_build_query($params);\n        }\n        return md5($key);\n    }\n    \n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306e\u53d6\u5f97\n    private function getCachePath($key) {\n        return $this-&gt;cacheDir . '\/' . $key . '.json';\n    }\n    \n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6709\u52b9\u6027\u30c1\u30a7\u30c3\u30af\n    private function isCacheValid($cachePath, $ttl) {\n        if (!file_exists($cachePath)) {\n            return false;\n        }\n        \n        $modTime = filemtime($cachePath);\n        return (time() - $modTime) &lt; $ttl;\n    }\n    \n    \/\/ API\u3092\u547c\u3073\u51fa\u3057\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u4f7f\u7528\n    public function callAPI($url, $params = [], $ttl = 3600, $headers = []) {\n        $key = $this-&gt;getCacheKey($url, $params);\n        $cachePath = $this-&gt;getCachePath($key);\n        \n        \/\/ \u6709\u52b9\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u3042\u308c\u3070\u4f7f\u7528\n        if ($this-&gt;isCacheValid($cachePath, $ttl)) {\n            return json_decode(file_get_contents($cachePath), true);\n        }\n        \n        \/\/ API\u3092\u547c\u3073\u51fa\u3057\n        $fullUrl = $url;\n        if (!empty($params)) {\n            $fullUrl .= '?' . http_build_query($params);\n        }\n        \n        $context = stream_context_create([\n            'http' =&gt; [\n                'method' =&gt; 'GET',\n                'header' =&gt; $headers,\n                'timeout' =&gt; 30\n            ]\n        ]);\n        \n        $response = file_get_contents($fullUrl, false, $context);\n        \n        if ($response === false) {\n            \/\/ \u30a8\u30e9\u30fc\u6642\u306f\u53e4\u3044\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u3042\u308c\u3070\u4f7f\u7528\n            if (file_exists($cachePath)) {\n                return json_decode(file_get_contents($cachePath), true);\n            }\n            return null;\n        }\n        \n        \/\/ \u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\n        file_put_contents($cachePath, $response);\n        \n        return json_decode($response, true);\n    }\n    \n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u524a\u9664\n    public function clearCache($url = null, $params = []) {\n        if ($url === null) {\n            \/\/ \u5168\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u524a\u9664\n            array_map('unlink', glob($this-&gt;cacheDir . '\/*.json'));\n        } else {\n            \/\/ \u7279\u5b9a\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u524a\u9664\n            $key = $this-&gt;getCacheKey($url, $params);\n            $cachePath = $this-&gt;getCachePath($key);\n            if (file_exists($cachePath)) {\n                unlink($cachePath);\n            }\n        }\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$apiCache = new APICacheManager();\n\n\/\/ 1\u6642\u9593\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308bAPI\u547c\u3073\u51fa\u3057\n$weatherData = $apiCache-&gt;callAPI(\n    'https:\/\/api.weather.com\/forecast',\n    ['city' =&gt; 'Tokyo'],\n    3600,\n    ['X-API-Key: your_api_key_here']\n);\n\nif ($weatherData) {\n    echo \"\u6771\u4eac\u306e\u5929\u6c17: \" . $weatherData['forecast'] . PHP_EOL;\n}\n\n\/\/ \u7279\u5b9a\u306eAPI\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30af\u30ea\u30a2\n$apiCache-&gt;clearCache('https:\/\/api.weather.com\/forecast', ['city' =&gt; 'Tokyo']);\n<\/pre>\n\n\n\n<p>\u30ea\u30e2\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u306f\u3001Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3044\u3066\u5916\u90e8\u30ea\u30bd\u30fc\u30b9\u3092\u7d71\u5408\u3059\u308b\u305f\u3081\u306e\u5f37\u529b\u306a\u624b\u6bb5\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u63a5\u7d9a\u3092\u4f34\u3046\u305f\u3081\u3001\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u51e6\u7406\u3001\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3001\u305d\u3057\u3066\u9069\u5207\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u304c\u7279\u306b\u91cd\u8981\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u30dd\u30a4\u30f3\u30c8\u306b\u6ce8\u610f\u3057\u3066\u30ea\u30e2\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u30a2\u30af\u30bb\u30b9\u3092\u5b9f\u88c5\u3057\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u8a2d\u5b9a<\/strong>: \u30ea\u30e2\u30fc\u30c8\u30a2\u30af\u30bb\u30b9\u306b\u306f\u9069\u5207\u306a\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u5024\u3092\u8a2d\u5b9a\u3057\u3001\u5fdc\u7b54\u306e\u306a\u3044\u63a5\u7d9a\u3067\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u30cf\u30f3\u30b0\u3057\u306a\u3044\u3088\u3046\u306b\u3059\u308b<\/li>\n\n\n\n<li><strong>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/strong>: \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30a8\u30e9\u30fc\u3084\u8a8d\u8a3c\u30a8\u30e9\u30fc\u306a\u3069\u3001\u69d8\u3005\u306a\u969c\u5bb3\u306b\u5bfe\u51e6\u3067\u304d\u308b\u3088\u3046\u3001\u5305\u62ec\u7684\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3092\u5b9f\u88c5\u3059\u308b<\/li>\n\n\n\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0<\/strong>: \u983b\u7e41\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u30ea\u30e2\u30fc\u30c8\u30ea\u30bd\u30fc\u30b9\u306f\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u308b<\/li>\n\n\n\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3<\/strong>: \u7279\u306b\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u3092\u542b\u3080URL\u3084\u30d1\u30b9\u306b\u306f\u3001\u9069\u5207\u306a\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u65bd\u3059\u308b<\/li>\n\n\n\n<li><strong>\u5e2f\u57df\u5236\u9650\u3078\u306e\u914d\u616e<\/strong>: \u5927\u91cf\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u30ec\u30fc\u30c8\u5236\u9650\u3084\u30b9\u30ed\u30c3\u30c8\u30ea\u30f3\u30b0\u3092\u5b9f\u88c5\u3059\u308b<\/li>\n<\/ol>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u9069\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30ea\u30e2\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u30a2\u30af\u30bb\u30b9\u306e\u4fe1\u983c\u6027\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u78ba\u4fdd\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-104\">\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u5225\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3<\/h2>\n\n\n\n<p>PHP\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u3067\u306f\u3001\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u3001\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u5206\u6790\u3001\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u306a\u3069\u3001\u69d8\u3005\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3067\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u51e6\u7406\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002\u305d\u308c\u305e\u308c\u306e\u30b1\u30fc\u30b9\u306b\u6700\u9069\u306a\u5b9f\u88c5\u65b9\u6cd5\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u3067\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u969b\u306e\u958b\u767a\u3067\u3088\u304f\u76f4\u9762\u3059\u308b3\u3064\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3068\u3001\u305d\u308c\u305e\u308c\u306b\u5bfe\u3059\u308b\u6700\u9069\u306a\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-105\">\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u52b9\u7387\u7684\u306b\u8aad\u307f\u8fbc\u3093\u3067\u7ba1\u7406\u3059\u308b<\/h3>\n\n\n\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u306f\u3001\u958b\u767a\u30fb\u30c6\u30b9\u30c8\u30fb\u672c\u756a\u74b0\u5883\u306a\u3069\u7570\u306a\u308b\u74b0\u5883\u9593\u3067\u306e\u5207\u308a\u66ff\u3048\u3084\u3001\u30e6\u30fc\u30b6\u30fc\u5225\u306e\u8a2d\u5b9a\u5909\u66f4\u306b\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u3001\u5916\u90e8\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u7ba1\u7406\u3055\u308c\u308b\u3053\u3068\u304c\u4e00\u822c\u7684\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-106\">\u69d8\u3005\u306a\u5f62\u5f0f\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f<\/h4>\n\n\n\n<p>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u8907\u6570\u306e\u5f62\u5f0f\u304c\u3042\u308a\u3001\u305d\u308c\u305e\u308c\u306b\u6700\u9069\u306a\u8aad\u307f\u8fbc\u307f\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ INI\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\nfunction loadIniConfig($filePath) {\n    if (!file_exists($filePath)) {\n        return [];\n    }\n    return parse_ini_file($filePath, true); \/\/ \u7b2c2\u5f15\u6570\u304ctrue\u3067\u30bb\u30af\u30b7\u30e7\u30f3\u4ed8\u304dINI\u3092\u51e6\u7406\n}\n\n\/\/ JSON\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\nfunction loadJsonConfig($filePath) {\n    if (!file_exists($filePath)) {\n        return [];\n    }\n    $content = file_get_contents($filePath);\n    $config = json_decode($content, true);\n    if (json_last_error() !== JSON_ERROR_NONE) {\n        throw new Exception(\"JSON\u30d1\u30fc\u30b9\u30a8\u30e9\u30fc: \" . json_last_error_msg());\n    }\n    return $config;\n}\n\n\/\/ YAML\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\uff08ext-yaml\u304c\u5fc5\u8981\uff09\nfunction loadYamlConfig($filePath) {\n    if (!extension_loaded('yaml')) {\n        throw new Exception(\"YAML\u62e1\u5f35\u6a5f\u80fd\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u307e\u305b\u3093\");\n    }\n    if (!file_exists($filePath)) {\n        return [];\n    }\n    return yaml_parse_file($filePath);\n}\n\n\/\/ XML\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\nfunction loadXmlConfig($filePath) {\n    if (!file_exists($filePath)) {\n        return [];\n    }\n    $xml = simplexml_load_file($filePath);\n    if ($xml === false) {\n        throw new Exception(\"XML\u30d1\u30fc\u30b9\u30a8\u30e9\u30fc\");\n    }\n    \/\/ SimpleXMLElement\u3092PHP\u306e\u914d\u5217\u306b\u5909\u63db\n    return json_decode(json_encode($xml), true);\n}\n\n\/\/ \u74b0\u5883\u5909\u6570\u30d5\u30a1\u30a4\u30eb\uff08.env\uff09\u306e\u8aad\u307f\u8fbc\u307f\nfunction loadEnvFile($filePath) {\n    if (!file_exists($filePath)) {\n        return false;\n    }\n    \n    $lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);\n    foreach ($lines as $line) {\n        \/\/ \u30b3\u30e1\u30f3\u30c8\u884c\u3092\u30b9\u30ad\u30c3\u30d7\n        if (strpos(trim($line), '#') === 0) {\n            continue;\n        }\n        \n        \/\/ \u5909\u6570\u5b9a\u7fa9\u306e\u89e3\u6790\n        if (strpos($line, '=') !== false) {\n            list($name, $value) = explode('=', $line, 2);\n            $name = trim($name);\n            $value = trim($value);\n            \n            \/\/ \u5f15\u7528\u7b26\u3092\u524a\u9664\n            if (strpos($value, '\"') === 0 || strpos($value, \"'\") === 0) {\n                $value = substr($value, 1, -1);\n            }\n            \n            \/\/ \u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u8a2d\u5b9a\n            putenv(\"{$name}={$value}\");\n            $_ENV[$name] = $value;\n            $_SERVER[$name] = $value;\n        }\n    }\n    \n    return true;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-107\">\u7d71\u5408\u8a2d\u5b9a\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u306e\u5b9f\u88c5<\/h4>\n\n\n\n<p>\u8907\u6570\u306e\u5f62\u5f0f\u3084\u74b0\u5883\u306b\u5bfe\u5fdc\u3057\u305f\u7d71\u5408\u7684\u306a\u8a2d\u5b9a\u7ba1\u7406\u30af\u30e9\u30b9\u3092\u5b9f\u88c5\u3059\u308b\u3068\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u3067\u4e00\u8cab\u3057\u305f\u8a2d\u5b9a\u30a2\u30af\u30bb\u30b9\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ConfigManager {\n    private $config = [];\n    private $configFiles = [];\n    private $cache = null;\n    private $cacheFile = null;\n    \n    public function __construct($cacheFile = null) {\n        $this-&gt;cacheFile = $cacheFile;\n        if ($cacheFile !== null &amp;&amp; file_exists($cacheFile)) {\n            $this-&gt;loadCache();\n        }\n    }\n    \n    \/\/ \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u8ffd\u52a0\n    public function addConfigFile($filePath, $format = null) {\n        if (!file_exists($filePath)) {\n            throw new Exception(\"\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: $filePath\");\n        }\n        \n        \/\/ \u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306e\u81ea\u52d5\u5224\u5b9a\n        if ($format === null) {\n            $extension = strtolower(pathinfo($filePath, PATHINFO_EXTENSION));\n            switch ($extension) {\n                case 'ini': $format = 'ini'; break;\n                case 'json': $format = 'json'; break;\n                case 'yml':\n                case 'yaml': $format = 'yaml'; break;\n                case 'xml': $format = 'xml'; break;\n                case 'env': $format = 'env'; break;\n                default: throw new Exception(\"\u672a\u77e5\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f: $extension\");\n            }\n        }\n        \n        $this-&gt;configFiles[] = [\n            'path' =&gt; $filePath,\n            'format' =&gt; $format,\n            'mtime' =&gt; filemtime($filePath)\n        ];\n        \n        return $this;\n    }\n    \n    \/\/ \u8a2d\u5b9a\u306e\u30ed\u30fc\u30c9\n    public function load() {\n        \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u6709\u52b9\u304b\u3069\u3046\u304b\u30c1\u30a7\u30c3\u30af\n        if ($this-&gt;isCacheValid()) {\n            return $this;\n        }\n        \n        $this-&gt;config = [];\n        \n        \/\/ \u5404\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080\n        foreach ($this-&gt;configFiles as $file) {\n            $config = [];\n            \n            switch ($file['format']) {\n                case 'ini':\n                    $config = parse_ini_file($file['path'], true);\n                    break;\n                case 'json':\n                    $config = loadJsonConfig($file['path']);\n                    break;\n                case 'yaml':\n                    $config = loadYamlConfig($file['path']);\n                    break;\n                case 'xml':\n                    $config = loadXmlConfig($file['path']);\n                    break;\n                case 'env':\n                    loadEnvFile($file['path']);\n                    \/\/ .env\u30d5\u30a1\u30a4\u30eb\u306f\u74b0\u5883\u5909\u6570\u3068\u3057\u3066\u8aad\u307f\u8fbc\u3080\u305f\u3081\u3001\n                    \/\/ \u8a2d\u5b9a\u914d\u5217\u306b\u306f\u8ffd\u52a0\u3057\u306a\u3044\n                    continue 2;\n            }\n            \n            \/\/ \u65e2\u5b58\u306e\u8a2d\u5b9a\u3068\u30de\u30fc\u30b8\n            $this-&gt;config = array_merge_recursive($this-&gt;config, $config);\n        }\n        \n        \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u4fdd\u5b58\n        $this-&gt;saveCache();\n        \n        return $this;\n    }\n    \n    \/\/ \u8a2d\u5b9a\u5024\u306e\u53d6\u5f97\n    public function get($key = null, $default = null) {\n        \/\/ \u672a\u30ed\u30fc\u30c9\u306e\u5834\u5408\u306f\u8aad\u307f\u8fbc\u307f\n        if (empty($this-&gt;config) &amp;&amp; empty($this-&gt;cache)) {\n            $this-&gt;load();\n        }\n        \n        \/\/ \u30ad\u30fc\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u5168\u8a2d\u5b9a\u3092\u8fd4\u3059\n        if ($key === null) {\n            return $this-&gt;config;\n        }\n        \n        \/\/ \u30c9\u30c3\u30c8\u8a18\u6cd5\u3067\u30cd\u30b9\u30c8\u3057\u305f\u5024\u306b\u30a2\u30af\u30bb\u30b9\uff08\u4f8b: 'database.host'\uff09\n        $segments = explode('.', $key);\n        $value = $this-&gt;config;\n        \n        foreach ($segments as $segment) {\n            if (!isset($value[$segment])) {\n                return $default;\n            }\n            $value = $value[$segment];\n        }\n        \n        return $value;\n    }\n    \n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6709\u52b9\u6027\u30c1\u30a7\u30c3\u30af\n    private function isCacheValid() {\n        if ($this-&gt;cacheFile === null || !file_exists($this-&gt;cacheFile)) {\n            return false;\n        }\n        \n        if ($this-&gt;cache === null) {\n            $this-&gt;loadCache();\n        }\n        \n        \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u66f4\u65b0\u65e5\u6642\u3092\u30c1\u30a7\u30c3\u30af\n        foreach ($this-&gt;configFiles as $file) {\n            if (!isset($this-&gt;cache['files'][$file['path']]) || \n                $this-&gt;cache['files'][$file['path']] &lt; $file['mtime']) {\n                return false;\n            }\n        }\n        \n        $this-&gt;config = $this-&gt;cache['config'];\n        return true;\n    }\n    \n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u8aad\u307f\u8fbc\u307f\n    private function loadCache() {\n        $this-&gt;cache = unserialize(file_get_contents($this-&gt;cacheFile));\n        $this-&gt;config = $this-&gt;cache['config'];\n    }\n    \n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u4fdd\u5b58\n    private function saveCache() {\n        if ($this-&gt;cacheFile === null) {\n            return;\n        }\n        \n        $files = [];\n        foreach ($this-&gt;configFiles as $file) {\n            $files[$file['path']] = $file['mtime'];\n        }\n        \n        $cache = [\n            'config' =&gt; $this-&gt;config,\n            'files' =&gt; $files\n        ];\n        \n        file_put_contents($this-&gt;cacheFile, serialize($cache));\n        $this-&gt;cache = $cache;\n    }\n    \n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30af\u30ea\u30a2\n    public function clearCache() {\n        if ($this-&gt;cacheFile !== null &amp;&amp; file_exists($this-&gt;cacheFile)) {\n            unlink($this-&gt;cacheFile);\n        }\n        $this-&gt;cache = null;\n        return $this;\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$config = new ConfigManager('\/tmp\/config_cache.php');\n$config-&gt;addConfigFile('\/path\/to\/config.json')\n       -&gt;addConfigFile('\/path\/to\/environment.env')\n       -&gt;load();\n\n\/\/ \u8a2d\u5b9a\u5024\u306e\u53d6\u5f97\n$dbHost = $config-&gt;get('database.host', 'localhost');\n$apiKey = $config-&gt;get('api.key');\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-108\">\u74b0\u5883\u3054\u3068\u306e\u8a2d\u5b9a\u5207\u308a\u66ff\u3048<\/h4>\n\n\n\n<p>\u958b\u767a\u3001\u30c6\u30b9\u30c8\u3001\u672c\u756a\u306a\u3069\u306e\u74b0\u5883\u3054\u3068\u306b\u8a2d\u5b9a\u3092\u5207\u308a\u66ff\u3048\u308b\u30d1\u30bf\u30fc\u30f3\u306f\u975e\u5e38\u306b\u4e00\u822c\u7684\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u74b0\u5883\u3054\u3068\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\nfunction loadEnvironmentConfig($environment = null) {\n    \/\/ \u74b0\u5883\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u74b0\u5883\u5909\u6570\u304b\u3089\u53d6\u5f97\n    if ($environment === null) {\n        $environment = getenv('APP_ENV') ?: 'development';\n    }\n    \n    \/\/ \u57fa\u672c\u8a2d\u5b9a\u306e\u8aad\u307f\u8fbc\u307f\n    $baseConfig = loadJsonConfig(__DIR__ . '\/config\/config.json');\n    \n    \/\/ \u74b0\u5883\u56fa\u6709\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\n    $envConfigPath = __DIR__ . \"\/config\/config.{$environment}.json\";\n    \n    \/\/ \u74b0\u5883\u56fa\u6709\u8a2d\u5b9a\u304c\u3042\u308c\u3070\u8aad\u307f\u8fbc\u3080\n    if (file_exists($envConfigPath)) {\n        $envConfig = loadJsonConfig($envConfigPath);\n        \/\/ \u57fa\u672c\u8a2d\u5b9a\u3068\u74b0\u5883\u56fa\u6709\u8a2d\u5b9a\u3092\u30de\u30fc\u30b8\n        $config = array_replace_recursive($baseConfig, $envConfig);\n    } else {\n        $config = $baseConfig;\n    }\n    \n    return $config;\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-109\">\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u5206\u6790\u3068\u5b9f\u7528\u7684\u306a\u51e6\u7406\u30d1\u30bf\u30fc\u30f3<\/h3>\n\n\n\n<p>\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u5206\u6790\u306f\u3001\u30b7\u30b9\u30c6\u30e0\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3084\u5229\u7528\u7d71\u8a08\u306e\u53ce\u96c6\u306b\u304a\u3044\u3066\u91cd\u8981\u306a\u30bf\u30b9\u30af\u3067\u3059\u3002\u5927\u91cf\u306e\u30ed\u30b0\u30c7\u30fc\u30bf\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406\u3059\u308b\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-110\">\u5927\u898f\u6a21\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u884c\u5358\u4f4d\u51e6\u7406<\/h4>\n\n\n\n<p>Web\u30b5\u30fc\u30d0\u30fc\u3084\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306f\u6570GB\u4ee5\u4e0a\u306b\u306a\u308b\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002\u52b9\u7387\u7684\u306a\u51e6\u7406\u306e\u305f\u3081\u306b\u306f\u30011\u884c\u305a\u3064\u8aad\u307f\u8fbc\u3093\u3067\u51e6\u7406\u3059\u308b\u65b9\u6cd5\u304c\u6700\u9069\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5927\u898f\u6a21\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u3092\u884c\u5358\u4f4d\u3067\u52b9\u7387\u7684\u306b\u51e6\u7406\nfunction analyzeLogFile($logPath, $callback) {\n    $handle = fopen($logPath, 'r');\n    if (!$handle) {\n        throw new Exception(\"\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3051\u307e\u305b\u3093: $logPath\");\n    }\n    \n    $lineCount = 0;\n    $startTime = microtime(true);\n    \n    \/\/ 1\u884c\u305a\u3064\u8aad\u307f\u8fbc\u3093\u3067\u51e6\u7406\n    while (($line = fgets($handle)) !== false) {\n        $lineCount++;\n        \n        \/\/ \u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\u3067\u884c\u3092\u51e6\u7406\n        $callback($line, $lineCount);\n        \n        \/\/ \u9032\u6357\u8868\u793a\uff08100,000\u884c\u3054\u3068\uff09\n        if ($lineCount % 100000 === 0) {\n            $elapsed = microtime(true) - $startTime;\n            $linesPerSec = $lineCount \/ $elapsed;\n            echo \"\u51e6\u7406\u884c\u6570: $lineCount, \u901f\u5ea6: \" . round($linesPerSec, 2) . \" \u884c\/\u79d2\\n\";\n        }\n    }\n    \n    $elapsed = microtime(true) - $startTime;\n    echo \"\u5408\u8a08 $lineCount \u884c\u3092\u51e6\u7406\u3057\u307e\u3057\u305f (\u6240\u8981\u6642\u9593: \" . round($elapsed, 2) . \" \u79d2)\\n\";\n    \n    fclose($handle);\n    return $lineCount;\n}\n\n\/\/ \u4f7f\u7528\u4f8b: Apache\u306e\u30a2\u30af\u30bb\u30b9\u30ed\u30b0\u304b\u3089\u7279\u5b9a\u306eIP\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u62bd\u51fa\nfunction extractRequestsByIP($logPath, $targetIP) {\n    $requests = [];\n    \n    analyzeLogFile($logPath, function($line, $lineNumber) use (&amp;$requests, $targetIP) {\n        \/\/ IP\u30a2\u30c9\u30ec\u30b9\u3092\u62bd\u51fa\uff08\u4e00\u822c\u7684\u306a\u30a2\u30af\u30bb\u30b9\u30ed\u30b0\u5f62\u5f0f\u3092\u60f3\u5b9a\uff09\n        if (preg_match('\/^(\\S+) \/', $line, $matches)) {\n            $ip = $matches[1];\n            if ($ip === $targetIP) {\n                $requests[] = trim($line);\n            }\n        }\n    });\n    \n    return $requests;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-111\">\u6b63\u898f\u8868\u73fe\u3092\u4f7f\u3063\u305f\u30ed\u30b0\u30d1\u30bf\u30fc\u30f3\u306e\u62bd\u51fa<\/h4>\n\n\n\n<p>\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u5185\u306e\u7279\u5b9a\u30d1\u30bf\u30fc\u30f3\u3092\u62bd\u51fa\u3059\u308b\u306b\u306f\u3001\u6b63\u898f\u8868\u73fe\u3092\u4f7f\u7528\u3059\u308b\u306e\u304c\u52b9\u7387\u7684\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u6b63\u898f\u8868\u73fe\u3092\u4f7f\u3063\u305f\u30ed\u30b0\u30d1\u30bf\u30fc\u30f3\u306e\u62bd\u51fa\nfunction extractLogPatterns($logPath, $pattern) {\n    $matches = [];\n    \n    analyzeLogFile($logPath, function($line, $lineNumber) use (&amp;$matches, $pattern) {\n        if (preg_match($pattern, $line, $lineMatches)) {\n            $matches[] = [\n                'line' =&gt; $lineNumber,\n                'content' =&gt; trim($line),\n                'matches' =&gt; $lineMatches\n            ];\n        }\n    });\n    \n    return $matches;\n}\n\n\/\/ \u4f7f\u7528\u4f8b: \u30a8\u30e9\u30fc\u30ed\u30b0\u304b\u3089\u7279\u5b9a\u306e\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u62bd\u51fa\n$errorPattern = '\/ERROR\\s+\\[([^\\]]+)\\]\\s+(.+)\/';\n$errors = extractLogPatterns('\/var\/log\/application.log', $errorPattern);\n\nforeach ($errors as $error) {\n    echo \"\u884c {$error['line']}: \";\n    echo \"\u30a8\u30e9\u30fc\u30bf\u30a4\u30d7: {$error['matches'][1]}, \";\n    echo \"\u30e1\u30c3\u30bb\u30fc\u30b8: {$error['matches'][2]}\\n\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-112\">\u30ed\u30b0\u30c7\u30fc\u30bf\u306e\u96c6\u8a08\u3068\u7d71\u8a08\u5206\u6790<\/h4>\n\n\n\n<p>\u30ed\u30b0\u30c7\u30fc\u30bf\u304b\u3089\u7d71\u8a08\u60c5\u5831\u3092\u751f\u6210\u3059\u308b\u4e00\u822c\u7684\u306a\u30d1\u30bf\u30fc\u30f3\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ed\u30b0\u306e\u7d71\u8a08\u5206\u6790\nfunction generateLogStatistics($logPath, $datePattern, $targetPattern) {\n    $stats = [\n        'total' =&gt; 0,\n        'matches' =&gt; 0,\n        'by_date' =&gt; [],\n        'by_hour' =&gt; array_fill(0, 24, 0)\n    ];\n    \n    analyzeLogFile($logPath, function($line, $lineNumber) use (&amp;$stats, $datePattern, $targetPattern) {\n        $stats['total']++;\n        \n        \/\/ \u65e5\u4ed8\u3068\u6642\u9593\u3092\u62bd\u51fa\n        if (preg_match($datePattern, $line, $dateMatches)) {\n            $dateStr = $dateMatches[1];\n            $date = date('Y-m-d', strtotime($dateStr));\n            $hour = (int)date('H', strtotime($dateStr));\n            \n            \/\/ \u65e5\u4ed8\u3054\u3068\u306e\u96c6\u8a08\n            if (!isset($stats['by_date'][$date])) {\n                $stats['by_date'][$date] = 0;\n            }\n            \n            \/\/ \u30d1\u30bf\u30fc\u30f3\u30de\u30c3\u30c1\u306e\u78ba\u8a8d\n            if (preg_match($targetPattern, $line)) {\n                $stats['matches']++;\n                $stats['by_date'][$date]++;\n                $stats['by_hour'][$hour]++;\n            }\n        }\n    });\n    \n    \/\/ \u65e5\u4ed8\u3067\u4e26\u3079\u66ff\u3048\n    ksort($stats['by_date']);\n    \n    return $stats;\n}\n\n\/\/ \u4f7f\u7528\u4f8b: HTTP\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9404\u306e\u767a\u751f\u72b6\u6cc1\u3092\u5206\u6790\n$datePattern = '\/\\[([0-9]{2}\\\/[A-Za-z]{3}\\\/[0-9]{4}:[0-9]{2}:[0-9]{2}:[0-9]{2})\/';\n$notFoundPattern = '\/ 404 \/';\n$stats = generateLogStatistics('\/var\/log\/apache2\/access.log', $datePattern, $notFoundPattern);\n\necho \"\u5408\u8a08\u30ea\u30af\u30a8\u30b9\u30c8\u6570: {$stats['total']}\\n\";\necho \"404\u30a8\u30e9\u30fc\u6570: {$stats['matches']} (\" . round(($stats['matches'] \/ $stats['total']) * 100, 2) . \"%)\\n\";\n\necho \"\\n\u65e5\u4ed8\u5225\u306e404\u30a8\u30e9\u30fc\u6570:\\n\";\nforeach ($stats['by_date'] as $date =&gt; $count) {\n    echo \"$date: $count\\n\";\n}\n\necho \"\\n\u6642\u9593\u5e2f\u5225\u306e404\u30a8\u30e9\u30fc\u6570:\\n\";\nfor ($i = 0; $i &lt; 24; $i++) {\n    $hour = sprintf('%02d', $i);\n    echo \"$hour\u6642\u53f0: {$stats['by_hour'][$i]}\\n\";\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-113\">\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u51e6\u7406\u3092\u5b9f\u88c5\u3059\u308b<\/h3>\n\n\n\n<p>\u30c7\u30fc\u30bf\u79fb\u884c\u3084\u30b7\u30b9\u30c6\u30e0\u9023\u643a\u306a\u3069\u3067\u306f\u3001CSV\u3084Excel\u30d5\u30a1\u30a4\u30eb\u306a\u3069\u306e\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u30a4\u30f3\u30dd\u30fc\u30c8\u3059\u308b\u51e6\u7406\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002\u30e1\u30e2\u30ea\u52b9\u7387\u3068\u901f\u5ea6\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u5b9f\u88c5\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-114\">CSV\u304b\u3089\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u52b9\u7387\u7684\u306a\u30a4\u30f3\u30dd\u30fc\u30c8<\/h4>\n\n\n\n<p>\u5927\u898f\u6a21CSV\u30d5\u30a1\u30a4\u30eb\u3092MySQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u52b9\u7387\u7684\u306b\u30a4\u30f3\u30dd\u30fc\u30c8\u3059\u308b\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5927\u898f\u6a21CSV\u30d5\u30a1\u30a4\u30eb\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a4\u30f3\u30dd\u30fc\u30c8\nfunction importCsvToDatabase($csvPath, $tableName, $options = []) {\n    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u30aa\u30d7\u30b7\u30e7\u30f3\n    $defaults = [\n        'delimiter' =&gt; ',',\n        'enclosure' =&gt; '\"',\n        'escape' =&gt; '\\\\',\n        'batchSize' =&gt; 1000,\n        'skipFirstRow' =&gt; true,\n        'columnMapping' =&gt; null,\n        'pdo' =&gt; null,\n        'onProgress' =&gt; null\n    ];\n    \n    $options = array_merge($defaults, $options);\n    \n    \/\/ PDO\u63a5\u7d9a\u304c\u5fc5\u8981\n    if (!$options['pdo'] instanceof PDO) {\n        throw new Exception(\"\u6709\u52b9\u306aPDO\u63a5\u7d9a\u304c\u5fc5\u8981\u3067\u3059\");\n    }\n    \n    $pdo = $options['pdo'];\n    \n    \/\/ CSV\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\n    $handle = fopen($csvPath, 'r');\n    if ($handle === false) {\n        throw new Exception(\"CSV\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3051\u307e\u305b\u3093: $csvPath\");\n    }\n    \n    \/\/ \u6700\u521d\u306e\u884c\u3092\u8aad\u307f\u8fbc\u307f\u3001\u30ab\u30e9\u30e0\u540d\u3092\u53d6\u5f97\n    $headerRow = fgetcsv($handle, 0, $options['delimiter'], $options['enclosure'], $options['escape']);\n    if ($headerRow === false) {\n        fclose($handle);\n        throw new Exception(\"CSV\u30d5\u30a1\u30a4\u30eb\u304c\u7a7a\u304b\u3001\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\");\n    }\n    \n    \/\/ \u30ab\u30e9\u30e0\u30de\u30c3\u30d4\u30f3\u30b0\u306e\u8a2d\u5b9a\n    $columns = [];\n    if ($options['columnMapping'] === null) {\n        \/\/ \u30de\u30c3\u30d4\u30f3\u30b0\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306fCSV\u306e\u30d8\u30c3\u30c0\u30fc\u3092\u305d\u306e\u307e\u307e\u4f7f\u7528\n        $columns = $headerRow;\n    } else {\n        \/\/ \u30de\u30c3\u30d4\u30f3\u30b0\u3092\u4f7f\u7528\n        $columns = array_values($options['columnMapping']);\n        \/\/ CSV\u306e\u30ab\u30e9\u30e0\u9806\u3092\u30de\u30c3\u30d4\u30f3\u30b0\u306b\u5408\u308f\u305b\u308b\n        $headerMap = array_flip($headerRow);\n        $columnIndexes = [];\n        foreach ($options['columnMapping'] as $csvColumn =&gt; $dbColumn) {\n            if (isset($headerMap[$csvColumn])) {\n                $columnIndexes[] = $headerMap[$csvColumn];\n            } else {\n                $columnIndexes[] = null; \/\/ \u30de\u30c3\u30d4\u30f3\u30b0\u306b\u306a\u3044\u30ab\u30e9\u30e0\u306fnull\n            }\n        }\n    }\n    \n    \/\/ \u30ab\u30e9\u30e0\u30ea\u30b9\u30c8\u304b\u3089SQL\u7528\u306e\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u3092\u751f\u6210\n    $placeholders = implode(', ', array_fill(0, count($columns), '?'));\n    $columnList = implode(', ', array_map(function($col) use ($pdo) {\n        return $pdo-&gt;quote($col);\n    }, $columns));\n    \n    \/\/ \u4e00\u6642\u30c6\u30fc\u30d6\u30eb\u306e\u4f5c\u6210\uff08\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\uff09\n    try {\n        \/\/ \u30c6\u30fc\u30d6\u30eb\u306e\u5b58\u5728\u78ba\u8a8d\n        $stmt = $pdo-&gt;prepare(\"SHOW TABLES LIKE ?\");\n        $stmt-&gt;execute([$tableName]);\n        if ($stmt-&gt;rowCount() === 0) {\n            throw new Exception(\"\u30c6\u30fc\u30d6\u30eb\u304c\u5b58\u5728\u3057\u307e\u305b\u3093: $tableName\");\n        }\n    } catch (Exception $e) {\n        fclose($handle);\n        throw $e;\n    }\n    \n    \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u958b\u59cb\n    $pdo-&gt;beginTransaction();\n    \n    try {\n        \/\/ \u30d0\u30c3\u30c1\u30a4\u30f3\u30b5\u30fc\u30c8\u7528\u306e\u6e96\u5099\n        $sql = \"INSERT INTO $tableName ($columnList) VALUES ($placeholders)\";\n        $stmt = $pdo-&gt;prepare($sql);\n        \n        $totalRows = 0;\n        $successRows = 0;\n        $batchCount = 0;\n        $startTime = microtime(true);\n        \n        \/\/ \u6700\u521d\u306e\u884c\u3092\u30b9\u30ad\u30c3\u30d7\uff08\u30d8\u30c3\u30c0\u30fc\u884c\uff09\n        if ($options['skipFirstRow']) {\n            \/\/ \u3059\u3067\u306b\u8aad\u307f\u8fbc\u307f\u6e08\u307f\n        } else {\n            \/\/ \u30d5\u30a1\u30a4\u30eb\u30dd\u30a4\u30f3\u30bf\u3092\u5148\u982d\u306b\u623b\u3059\n            rewind($handle);\n        }\n        \n        \/\/ \u30c7\u30fc\u30bf\u884c\u306e\u51e6\u7406\n        while (($row = fgetcsv($handle, 0, $options['delimiter'], $options['enclosure'], $options['escape'])) !== false) {\n            $totalRows++;\n            \n            \/\/ \u30de\u30c3\u30d4\u30f3\u30b0\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u9069\u7528\n            if ($options['columnMapping'] !== null) {\n                $mappedRow = [];\n                foreach ($columnIndexes as $index) {\n                    $mappedRow[] = $index !== null ? $row[$index] : null;\n                }\n                $row = $mappedRow;\n            }\n            \n            \/\/ \u884c\u30c7\u30fc\u30bf\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u633f\u5165\n            try {\n                $stmt-&gt;execute($row);\n                $successRows++;\n            } catch (Exception $e) {\n                error_log(\"\u884c $totalRows \u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u306b\u5931\u6557: \" . $e-&gt;getMessage());\n                \/\/ \u30a8\u30e9\u30fc\u3092\u8a18\u9332\u3057\u3066\u7d9a\u884c\n                continue;\n            }\n            \n            $batchCount++;\n            \n            \/\/ \u30d0\u30c3\u30c1\u30b5\u30a4\u30ba\u306b\u9054\u3057\u305f\u3089\u30b3\u30df\u30c3\u30c8\n            if ($batchCount &gt;= $options['batchSize']) {\n                $pdo-&gt;commit();\n                $pdo-&gt;beginTransaction();\n                $batchCount = 0;\n                \n                \/\/ \u9032\u6357\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\n                if (is_callable($options['onProgress'])) {\n                    $elapsed = microtime(true) - $startTime;\n                    $rowsPerSec = $totalRows \/ $elapsed;\n                    $options['onProgress']($totalRows, $successRows, $rowsPerSec);\n                }\n            }\n        }\n        \n        \/\/ \u6b8b\u308a\u306e\u30c7\u30fc\u30bf\u3092\u30b3\u30df\u30c3\u30c8\n        if ($batchCount &gt; 0) {\n            $pdo-&gt;commit();\n        }\n        \n        fclose($handle);\n        \n        $elapsed = microtime(true) - $startTime;\n        $rowsPerSec = $totalRows \/ $elapsed;\n        \n        \/\/ \u6700\u7d42\u9032\u6357\n        if (is_callable($options['onProgress'])) {\n            $options['onProgress']($totalRows, $successRows, $rowsPerSec);\n        }\n        \n        return [\n            'total_rows' =&gt; $totalRows,\n            'success_rows' =&gt; $successRows,\n            'elapsed_time' =&gt; $elapsed,\n            'rows_per_second' =&gt; $rowsPerSec\n        ];\n        \n    } catch (Exception $e) {\n        \/\/ \u30a8\u30e9\u30fc\u6642\u306f\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\n        $pdo-&gt;rollBack();\n        fclose($handle);\n        throw $e;\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\ntry {\n    \/\/ PDO\u63a5\u7d9a\n    $pdo = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password');\n    $pdo-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n    \n    \/\/ \u30ab\u30e9\u30e0\u30de\u30c3\u30d4\u30f3\u30b0\uff08CSV\u5217\u540d =&gt; DB\u5217\u540d\uff09\n    $columnMapping = [\n        'ID' =&gt; 'id',\n        'Name' =&gt; 'full_name',\n        'Email' =&gt; 'email_address',\n        'Created' =&gt; 'created_at'\n    ];\n    \n    \/\/ \u9032\u6357\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\n    $progressCallback = function($totalRows, $successRows, $rowsPerSec) {\n        echo \"\u51e6\u7406\u884c\u6570: $totalRows, \u6210\u529f: $successRows, \u901f\u5ea6: \" . \n             round($rowsPerSec, 2) . \" \u884c\/\u79d2\\r\";\n    };\n    \n    \/\/ \u30a4\u30f3\u30dd\u30fc\u30c8\u5b9f\u884c\n    $result = importCsvToDatabase(\n        '\/path\/to\/large_data.csv',\n        'users',\n        [\n            'columnMapping' =&gt; $columnMapping,\n            'batchSize' =&gt; 500,\n            'pdo' =&gt; $pdo,\n            'onProgress' =&gt; $progressCallback\n        ]\n    );\n    \n    echo \"\\n\u30a4\u30f3\u30dd\u30fc\u30c8\u5b8c\u4e86:\\n\";\n    echo \"\u5408\u8a08\u884c\u6570: {$result['total_rows']}\\n\";\n    echo \"\u6210\u529f\u884c\u6570: {$result['success_rows']}\\n\";\n    echo \"\u6240\u8981\u6642\u9593: \" . round($result['elapsed_time'], 2) . \" \u79d2\\n\";\n    echo \"\u5e73\u5747\u901f\u5ea6: \" . round($result['rows_per_second'], 2) . \" \u884c\/\u79d2\\n\";\n    \n} catch (Exception $e) {\n    echo \"\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage() . \"\\n\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-115\">\u5dee\u5206\u30a4\u30f3\u30dd\u30fc\u30c8\u306e\u5b9f\u88c5<\/h4>\n\n\n\n<p>\u65e2\u5b58\u30c7\u30fc\u30bf\u3068\u306e\u5dee\u5206\u3060\u3051\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3059\u308b\u65b9\u6cd5\u306f\u3001\u5b9a\u671f\u7684\u306a\u30c7\u30fc\u30bf\u66f4\u65b0\u306b\u52b9\u7387\u7684\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5dee\u5206\u30a4\u30f3\u30dd\u30fc\u30c8\u306e\u5b9f\u88c5\nfunction importDifferentialCsv($csvPath, $tableName, $keyColumn, $pdo, $options = []) {\n    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u30aa\u30d7\u30b7\u30e7\u30f3\n    $defaults = [\n        'skipFirstRow' =&gt; true,\n        'batchSize' =&gt; 1000,\n        'updateExisting' =&gt; true,\n        'timestampColumn' =&gt; 'updated_at'\n    ];\n    \n    $options = array_merge($defaults, $options);\n    \n    \/\/ \u65e2\u5b58\u30c7\u30fc\u30bf\u306e\u30ad\u30fc\u5024\u3092\u53d6\u5f97\n    $existingKeys = [];\n    $stmt = $pdo-&gt;prepare(\"SELECT $keyColumn FROM $tableName\");\n    $stmt-&gt;execute();\n    while ($row = $stmt-&gt;fetch(PDO::FETCH_ASSOC)) {\n        $existingKeys[$row[$keyColumn]] = true;\n    }\n    \n    \/\/ CSV\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\n    $handle = fopen($csvPath, 'r');\n    if ($handle === false) {\n        throw new Exception(\"CSV\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3051\u307e\u305b\u3093: $csvPath\");\n    }\n    \n    \/\/ \u30d8\u30c3\u30c0\u30fc\u884c\u3092\u53d6\u5f97\n    $header = fgetcsv($handle);\n    if ($header === false) {\n        fclose($handle);\n        throw new Exception(\"CSV\u30d5\u30a1\u30a4\u30eb\u304c\u7a7a\u304b\u3001\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\");\n    }\n    \n    \/\/ \u30ad\u30fc\u30ab\u30e9\u30e0\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u7279\u5b9a\n    $keyIndex = array_search($keyColumn, $header);\n    if ($keyIndex === false) {\n        fclose($handle);\n        throw new Exception(\"\u30ad\u30fc\u30ab\u30e9\u30e0 '$keyColumn' \u304cCSV\u30d8\u30c3\u30c0\u30fc\u306b\u898b\u3064\u304b\u308a\u307e\u305b\u3093\");\n    }\n    \n    \/\/ \u30ab\u30e9\u30e0\u30ea\u30b9\u30c8\u3068\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u3092\u751f\u6210\n    $columns = $header;\n    if ($options['timestampColumn'] &amp;&amp; !in_array($options['timestampColumn'], $columns)) {\n        $columns[] = $options['timestampColumn'];\n    }\n    \n    $placeholders = implode(', ', array_fill(0, count($columns), '?'));\n    $columnList = implode(', ', array_map(function($col) use ($pdo) {\n        return $pdo-&gt;quote($col);\n    }, $columns));\n    \n    \/\/ \u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u7528\u306eSET\u30af\u30a8\u30ea\u90e8\u5206\u3092\u751f\u6210\n    $updateParts = [];\n    foreach ($columns as $col) {\n        if ($col != $keyColumn) {\n            $updateParts[] = $pdo-&gt;quote($col) . \" = VALUES(\" . $pdo-&gt;quote($col) . \")\";\n        }\n    }\n    $updateQuery = implode(', ', $updateParts);\n    \n    \/\/ \u30a4\u30f3\u30b5\u30fc\u30c8\u7528\u3068\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u7528\u306e\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u6e96\u5099\n    $insertSql = \"INSERT INTO $tableName ($columnList) VALUES ($placeholders)\";\n    \n    if ($options['updateExisting']) {\n        $insertSql .= \" ON DUPLICATE KEY UPDATE $updateQuery\";\n    }\n    \n    $insertStmt = $pdo-&gt;prepare($insertSql);\n    \n    \/\/ \u51e6\u7406\u958b\u59cb\n    $pdo-&gt;beginTransaction();\n    \n    $newRecords = 0;\n    $updatedRecords = 0;\n    $processedRows = 0;\n    $batchCount = 0;\n    $now = date('Y-m-d H:i:s');\n    \n    try {\n        \/\/ \u6700\u521d\u306e\u884c\u3092\u30b9\u30ad\u30c3\u30d7\uff08\u30d8\u30c3\u30c0\u30fc\u884c\uff09\n        if (!$options['skipFirstRow']) {\n            rewind($handle);\n        }\n        \n        \/\/ \u30c7\u30fc\u30bf\u884c\u306e\u51e6\u7406\n        while (($row = fgetcsv($handle)) !== false) {\n            $processedRows++;\n            $keyValue = $row[$keyIndex];\n            \n            \/\/ \u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u30ab\u30e9\u30e0\u3092\u8ffd\u52a0\n            if ($options['timestampColumn']) {\n                $row[] = $now;\n            }\n            \n            \/\/ \u65e2\u5b58\u30ad\u30fc\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\n            $isExisting = isset($existingKeys[$keyValue]);\n            \n            \/\/ \u633f\u5165\u307e\u305f\u306f\u66f4\u65b0\n            $insertStmt-&gt;execute($row);\n            \n            if ($isExisting) {\n                $updatedRecords++;\n            } else {\n                $newRecords++;\n                $existingKeys[$keyValue] = true; \/\/ \u65b0\u3057\u3044\u30ad\u30fc\u3092\u8a18\u9332\n            }\n            \n            $batchCount++;\n            \n            \/\/ \u30d0\u30c3\u30c1\u30b5\u30a4\u30ba\u306b\u9054\u3057\u305f\u3089\u30b3\u30df\u30c3\u30c8\n            if ($batchCount &gt;= $options['batchSize']) {\n                $pdo-&gt;commit();\n                $pdo-&gt;beginTransaction();\n                $batchCount = 0;\n                \n                echo \"\u51e6\u7406\u884c\u6570: $processedRows, \u65b0\u898f: $newRecords, \u66f4\u65b0: $updatedRecords\\r\";\n            }\n        }\n        \n        \/\/ \u6b8b\u308a\u306e\u30c7\u30fc\u30bf\u3092\u30b3\u30df\u30c3\u30c8\n        if ($batchCount &gt; 0) {\n            $pdo-&gt;commit();\n        }\n        \n        fclose($handle);\n        \n        echo \"\\n\u5dee\u5206\u30a4\u30f3\u30dd\u30fc\u30c8\u5b8c\u4e86:\\n\";\n        echo \"\u51e6\u7406\u884c\u6570: $processedRows\\n\";\n        echo \"\u65b0\u898f\u30ec\u30b3\u30fc\u30c9: $newRecords\\n\";\n        echo \"\u66f4\u65b0\u30ec\u30b3\u30fc\u30c9: $updatedRecords\\n\";\n        \n        return [\n            'processed_rows' =&gt; $processedRows,\n            'new_records' =&gt; $newRecords,\n            'updated_records' =&gt; $updatedRecords\n        ];\n        \n    } catch (Exception $e) {\n        $pdo-&gt;rollBack();\n        fclose($handle);\n        throw $e;\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-116\">\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u51e6\u7406\u306b\u3088\u308b\u30a4\u30f3\u30dd\u30fc\u30c8\u9ad8\u901f\u5316<\/h4>\n\n\n\n<p>PHP\u306e\u6a19\u6e96\u6a5f\u80fd\u3067\u306f\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u51e6\u7406\u306f\u9650\u3089\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u5916\u90e8\u30b3\u30de\u30f3\u30c9\u3092\u5229\u7528\u3057\u3066\u4e26\u5217\u51e6\u7406\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ CSV\u30d5\u30a1\u30a4\u30eb\u3092\u5206\u5272\u3057\u3066\u4e26\u5217\u51e6\u7406\u3059\u308b\nfunction parallelCsvImport($csvPath, $tableName, $pdo, $threads = 4) {\n    \/\/ \u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u3092\u53d6\u5f97\n    $fileSize = filesize($csvPath);\n    $chunkSize = ceil($fileSize \/ $threads);\n    \n    \/\/ \u30d8\u30c3\u30c0\u30fc\u884c\u3092\u53d6\u5f97\n    $handle = fopen($csvPath, 'r');\n    $header = fgetcsv($handle);\n    fclose($handle);\n    \n    if (!$header) {\n        throw new Exception(\"CSV\u30d5\u30a1\u30a4\u30eb\u304c\u7a7a\u304b\u3001\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\");\n    }\n    \n    \/\/ \u4e00\u6642\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\n    $tempDir = sys_get_temp_dir() . '\/csv_import_' . uniqid();\n    if (!is_dir($tempDir)) {\n        mkdir($tempDir);\n    }\n    \n    \/\/ \u30b3\u30de\u30f3\u30c9\u914d\u5217\n    $commands = [];\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u3092\u5206\u5272\u3057\u3066\u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\n    exec(\"split -l $chunkSize $csvPath $tempDir\/part_\", $output, $returnVar);\n    if ($returnVar !== 0) {\n        throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u5206\u5272\u306b\u5931\u6557\u3057\u307e\u3057\u305f\");\n    }\n    \n    \/\/ \u5206\u5272\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u53d6\u5f97\n    $parts = glob(\"$tempDir\/part_*\");\n    \n    \/\/ \u5404\u90e8\u5206\u30d5\u30a1\u30a4\u30eb\u306b\u30d8\u30c3\u30c0\u30fc\u3092\u8ffd\u52a0\n    foreach ($parts as $partFile) {\n        \/\/ \u30d8\u30c3\u30c0\u30fc\u3092\u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u3080\n        $headerFile = \"$tempDir\/\" . basename($partFile) . \"_header.csv\";\n        file_put_contents($headerFile, implode(',', $header) . PHP_EOL);\n        \n        \/\/ \u30d8\u30c3\u30c0\u30fc\u3068\u5143\u30c7\u30fc\u30bf\u3092\u7d50\u5408\n        $fullFile = \"$tempDir\/\" . basename($partFile) . \"_full.csv\";\n        exec(\"cat $headerFile $partFile &gt; $fullFile\", $output, $returnVar);\n        \n        if ($returnVar === 0) {\n            \/\/ PHP\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u51e6\u7406\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3092\u4f5c\u6210\n            $scriptPath = __DIR__ . '\/import_worker.php';\n            $commands[] = \"php $scriptPath $fullFile $tableName \" . escapeshellarg(json_encode($pdo-&gt;getAttribute(PDO::ATTR_CONNECTION_STATUS)));\n        }\n    }\n    \n    \/\/ import_worker.php \u306e\u4f8b\uff08\u5225\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u4fdd\u5b58\uff09\n    \/*\n    &lt;?php\n    \/\/ \u30a4\u30f3\u30dd\u30fc\u30c8\u30ef\u30fc\u30ab\u30fc\u30b9\u30af\u30ea\u30d7\u30c8\n    if ($argc &lt; 4) {\n        exit(\"\u4f7f\u7528\u65b9\u6cd5: php import_worker.php [csv\u30d5\u30a1\u30a4\u30eb] [\u30c6\u30fc\u30d6\u30eb\u540d] [\u63a5\u7d9a\u6587\u5b57\u5217]\\n\");\n    }\n    \n    $csvFile = $argv[1];\n    $tableName = $argv[2];\n    $connInfo = json_decode($argv[3], true);\n    \n    \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\n    $pdo = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password');\n    $pdo-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n    \n    \/\/ \u30a4\u30f3\u30dd\u30fc\u30c8\u51e6\u7406\uff08\u4e0a\u8a18\u306e\u95a2\u6570\u3092\u4f7f\u7528\uff09\n    try {\n        $result = importCsvToDatabase($csvFile, $tableName, [\n            'pdo' =&gt; $pdo,\n            'batchSize' =&gt; 1000\n        ]);\n        exit(0); \/\/ \u6210\u529f\n    } catch (Exception $e) {\n        file_put_contents('php:\/\/stderr', $e-&gt;getMessage() . PHP_EOL);\n        exit(1); \/\/ \u5931\u6557\n    }\n    *\/\n    \n    \/\/ \u4e26\u5217\u5b9f\u884c\n    $processes = [];\n    foreach ($commands as $command) {\n        $process = proc_open($command, [\n            0 =&gt; ['pipe', 'r'],\n            1 =&gt; ['pipe', 'w'],\n            2 =&gt; ['pipe', 'w']\n        ], $pipes);\n        \n        if (is_resource($process)) {\n            $processes[] = [\n                'process' =&gt; $process,\n                'pipes' =&gt; $pipes,\n                'command' =&gt; $command\n            ];\n        }\n    }\n    \n    \/\/ \u30d7\u30ed\u30bb\u30b9\u306e\u7d42\u4e86\u3092\u5f85\u6a5f\n    $allSuccess = true;\n    foreach ($processes as $i =&gt; $process) {\n        $status = proc_get_status($process['process']);\n        while ($status['running']) {\n            sleep(1);\n            $status = proc_get_status($process['process']);\n        }\n        \n        $stdout = stream_get_contents($process['pipes'][1]);\n        $stderr = stream_get_contents($process['pipes'][2]);\n        \n        if ($status['exitcode'] !== 0) {\n            echo \"\u30d7\u30ed\u30bb\u30b9 $i \u5931\u6557: $stderr\\n\";\n            $allSuccess = false;\n        }\n        \n        \/\/ \u30d1\u30a4\u30d7\u3092\u9589\u3058\u308b\n        foreach ($process['pipes'] as $pipe) {\n            fclose($pipe);\n        }\n        \n        \/\/ \u30d7\u30ed\u30bb\u30b9\u3092\u9589\u3058\u308b\n        proc_close($process['process']);\n    }\n    \n    \/\/ \u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u306e\u524a\u9664\n    array_map('unlink', glob(\"$tempDir\/*\"));\n    rmdir($tempDir);\n    \n    return $allSuccess;\n}\n<\/pre>\n\n\n\n<p>\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u7d39\u4ecb\u3057\u305f\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u5225\u306e\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u306f\u3001\u5b9f\u969b\u306e\u958b\u767a\u73fe\u5834\u3067\u76f4\u9762\u3059\u308b\u5177\u4f53\u7684\u306a\u8ab2\u984c\u306b\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u306e\u5b9f\u8df5\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3067\u3059\u3002\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u52b9\u7387\u7684\u306a\u7ba1\u7406\u3001\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u5206\u6790\u3001\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u306a\u3069\u3001\u305d\u308c\u305e\u308c\u306e\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u6700\u9069\u306a\u5b9f\u88c5\u65b9\u6cd5\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5805\u7262\u3067\u52b9\u7387\u7684\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d1\u30bf\u30fc\u30f3\u306f\u305d\u306e\u307e\u307e\u4f7f\u7528\u3067\u304d\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u3066\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\u7279\u306b\u5927\u898f\u6a21\u306a\u30c7\u30fc\u30bf\u51e6\u7406\u3067\u306f\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3001\u51e6\u7406\u901f\u5ea6\u3001\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u8a2d\u8a08\u304c\u91cd\u8981\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-117\">PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f<\/h2>\n\n\n\n<p>\u30e2\u30c0\u30f3\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u3092\u7c21\u7d20\u5316\u3057\u3001\u62bd\u8c61\u5316\u3059\u308b\u305f\u3081\u306e\u9ad8\u5ea6\u306a\u6a5f\u80fd\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30b9\u30c8\u30ec\u30fc\u30b8\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306b\u4f9d\u5b58\u3057\u306a\u3044\u67d4\u8edf\u306a\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u304c\u53ef\u80fd\u306b\u306a\u308a\u3001\u958b\u767a\u52b9\u7387\u3068\u30b3\u30fc\u30c9\u306e\u4fdd\u5b88\u6027\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u4e3b\u8981\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3042\u308bLaravel\u3068Symfony\u306e\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u6a5f\u80fd\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-118\">Laravel\u306eStorage\u6a5f\u80fd\u3092\u4f7f\u3063\u305f\u52b9\u7387\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c<\/h3>\n\n\n\n<p>Laravel\u3067\u306f\u3001<code>Storage<\/code> \u30d5\u30a1\u30b5\u30fc\u30c9\u3092\u901a\u3058\u3066\u3001\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3068\u30af\u30e9\u30a6\u30c9\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u4e21\u65b9\u3092\u7d71\u4e00\u7684\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u64cd\u4f5c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-119\">\u57fa\u672c\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\n$contents = Storage::get('file.txt');\n\n\/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u78ba\u8a8d\nif (Storage::exists('file.txt')) {\n    \/\/ \u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u306e\u51e6\u7406\n}\n\n\/\/ \u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u306e\u53d6\u5f97\n$size = Storage::size('file.txt');\n\n\/\/ \u6700\u7d42\u66f4\u65b0\u6642\u523b\u306e\u53d6\u5f97\n$time = Storage::lastModified('file.txt');\n\n\/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u8fbc\u307f\nStorage::put('file.txt', '\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9');\n\n\/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u8ffd\u8a18\nStorage::append('file.txt', '\u8ffd\u52a0\u306e\u30b3\u30f3\u30c6\u30f3\u30c4');\n\n\/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u30b3\u30d4\u30fc\nStorage::copy('file.txt', 'new_file.txt');\n\n\/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u79fb\u52d5\nStorage::move('file.txt', 'new_location\/file.txt');\n\n\/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u524a\u9664\nStorage::delete('file.txt');\n\/\/ \u8907\u6570\u30d5\u30a1\u30a4\u30eb\u306e\u524a\u9664\nStorage::delete(['file1.txt', 'file2.txt']);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-120\">\u8907\u6570\u30c7\u30a3\u30b9\u30af\u306e\u7ba1\u7406<\/h4>\n\n\n\n<p>Laravel\u3067\u306f\u3001<code>config\/filesystems.php<\/code> \u3067\u8907\u6570\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u30c7\u30a3\u30b9\u30af\u3092\u8a2d\u5b9a\u3057\u3001\u7c21\u5358\u306b\u5207\u308a\u66ff\u3048\u3066\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u7279\u5b9a\u306e\u30c7\u30a3\u30b9\u30af\u3092\u6307\u5b9a\n$contents = Storage::disk('s3')-&gt;get('file.txt');\n\n\/\/ \u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af\n$contents = Storage::disk('local')-&gt;get('file.txt');\n\n\/\/ public\u30c7\u30a3\u30b9\u30af\uff08web\u516c\u958b\u7528\uff09\n$contents = Storage::disk('public')-&gt;get('file.txt');\n<\/pre>\n\n\n\n<p>\u4e00\u822c\u7684\u306a\u8a2d\u5b9a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/filesystems.php\n'disks' =&gt; [\n    'local' =&gt; [\n        'driver' =&gt; 'local',\n        'root' =&gt; storage_path('app'),\n    ],\n    'public' =&gt; [\n        'driver' =&gt; 'local',\n        'root' =&gt; storage_path('app\/public'),\n        'url' =&gt; env('APP_URL').'\/storage',\n        'visibility' =&gt; 'public',\n    ],\n    's3' =&gt; [\n        'driver' =&gt; 's3',\n        'key' =&gt; env('AWS_ACCESS_KEY_ID'),\n        'secret' =&gt; env('AWS_SECRET_ACCESS_KEY'),\n        'region' =&gt; env('AWS_DEFAULT_REGION'),\n        'bucket' =&gt; env('AWS_BUCKET'),\n        'url' =&gt; env('AWS_URL'),\n    ],\n],\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-121\">\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u51e6\u7406<\/h4>\n\n\n\n<p>Laravel\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u30b9\u30c8\u30ec\u30fc\u30b8\u6a5f\u80fd\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u3001\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u7c21\u5358\u306b\u51e6\u7406\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u51e6\u7406\npublic function upload(Request $request)\n{\n    \/\/ \u30d5\u30a1\u30a4\u30eb\u304c\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u304b\u30c1\u30a7\u30c3\u30af\n    if ($request-&gt;hasFile('file') &amp;&amp; $request-&gt;file('file')-&gt;isValid()) {\n        $file = $request-&gt;file('file');\n        \n        \/\/ \u30aa\u30ea\u30b8\u30ca\u30eb\u306e\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u53d6\u5f97\n        $fileName = $file-&gt;getClientOriginalName();\n        \n        \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u62e1\u5f35\u5b50\u3092\u53d6\u5f97\n        $extension = $file-&gt;getClientOriginalExtension();\n        \n        \/\/ MIME\u30bf\u30a4\u30d7\u3092\u53d6\u5f97\n        $mimeType = $file-&gt;getMimeType();\n        \n        \/\/ \u30d5\u30a1\u30a4\u30eb\u540d\u3092\u5b89\u5168\u306b\u4fdd\u5b58\uff08\u4e00\u610f\u306e\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u751f\u6210\uff09\n        $storedFile = $file-&gt;store('uploads');\n        \/\/ \u307e\u305f\u306f\u7279\u5b9a\u306e\u30c7\u30a3\u30b9\u30af\u306b\u4fdd\u5b58\n        $storedFile = $file-&gt;storeAs('uploads', $fileName, 's3');\n        \n        return \"\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u307e\u3057\u305f: \" . $storedFile;\n    }\n    \n    return \"\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-122\">\u4e00\u6642URL\uff08\u7f72\u540d\u4ed8\u304dURL\uff09\u306e\u751f\u6210<\/h4>\n\n\n\n<p>\u30af\u30e9\u30a6\u30c9\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306b\u4e00\u6642\u7684\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306eURL\u3092\u751f\u6210\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ S3\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306b5\u5206\u9593\u6709\u52b9\u306a\u4e00\u6642URL\u3092\u751f\u6210\n$url = Storage::disk('s3')-&gt;temporaryUrl(\n    'private\/file.pdf', now()-&gt;addMinutes(5)\n);\n\n\/\/ \u7f72\u540d\u4ed8\u304dURL\u3092\u751f\u6210\uff08\u516c\u958b\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u5236\u9650\u4ed8\u304d\u30a2\u30af\u30bb\u30b9\uff09\n$url = URL::temporarySignedRoute(\n    'files.download',\n    now()-&gt;addMinutes(30),\n    ['file' =&gt; 'contract.pdf']\n);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-123\">\u30b9\u30c8\u30ea\u30fc\u30e0\u51e6\u7406<\/h4>\n\n\n\n<p>Laravel\u306f\u3001\u30b9\u30c8\u30ea\u30fc\u30e0\u30e9\u30c3\u30d1\u30fc\u3092\u4f7f\u7528\u3057\u305f\u52b9\u7387\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u3082\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b9\u30c8\u30ea\u30fc\u30e0\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\n$resource = Storage::disk('local')-&gt;readStream('file.txt');\n\n\/\/ \u30b9\u30c8\u30ea\u30fc\u30e0\u3067\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u3080\nStorage::disk('s3')-&gt;writeStream(\n    'destination\/file.txt',\n    $resource\n);\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-124\">Symfony\u306e\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u6d3b\u7528\u3059\u308b<\/h3>\n\n\n\n<p>Symfony\u3067\u306f\u3001<code>Filesystem<\/code> \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u4f7f\u7528\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u3092\u62bd\u8c61\u5316\u3057\u307e\u3059\u3002\u3053\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306b\u5bfe\u3059\u308b\u64cd\u4f5c\u3092\u30b7\u30f3\u30d7\u30eb\u306b\u884c\u3048\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-125\">\u57fa\u672c\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">use Symfony\\Component\\Filesystem\\Filesystem;\nuse Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface;\n\n$filesystem = new Filesystem();\n\ntry {\n    \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u78ba\u8a8d\n    if ($filesystem-&gt;exists('file.txt')) {\n        \/\/ \u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u306e\u51e6\u7406\n    }\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u30b3\u30d4\u30fc\n    $filesystem-&gt;copy('file.txt', 'backup\/file.txt');\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u79fb\u52d5\n    $filesystem-&gt;rename('file.txt', 'new_location\/file.txt');\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u524a\u9664\n    $filesystem-&gt;remove('file.txt');\n    \/\/ \u8907\u6570\u30d5\u30a1\u30a4\u30eb\u306e\u524a\u9664\n    $filesystem-&gt;remove(['file1.txt', 'file2.txt', 'directory\/']);\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u30fb\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210\n    $filesystem-&gt;touch('new_file.txt');\n    $filesystem-&gt;mkdir('new_directory');\n    \n    \/\/ \u30b7\u30f3\u30dc\u30ea\u30c3\u30af\u30ea\u30f3\u30af\u306e\u4f5c\u6210\n    $filesystem-&gt;symlink('target.txt', 'link.txt');\n    \n    \/\/ \u30a2\u30c8\u30df\u30c3\u30af\u306a\u66f8\u304d\u8fbc\u307f\uff08\u66f8\u304d\u8fbc\u307f\u4e2d\u306e\u30d5\u30a1\u30a4\u30eb\u7834\u640d\u3092\u9632\u6b62\uff09\n    $filesystem-&gt;dumpFile('file.txt', '\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9');\n    $filesystem-&gt;appendToFile('file.txt', '\u8ffd\u52a0\u306e\u30b3\u30f3\u30c6\u30f3\u30c4');\n    \n    \/\/ \u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u306e\u5909\u66f4\n    $filesystem-&gt;chmod('file.txt', 0644);\n    \n} catch (IOExceptionInterface $exception) {\n    echo \"\u30a8\u30e9\u30fc: \" . $exception-&gt;getMessage();\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-126\">\u30d1\u30b9\u306e\u64cd\u4f5c<\/h4>\n\n\n\n<p>Symfony\u306e <code>Filesystem<\/code> \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3068\u4e00\u7dd2\u306b\u4f7f\u308f\u308c\u308b\u3053\u3068\u304c\u591a\u3044 <code>Finder<\/code> \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u4f7f\u3046\u3068\u3001\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306b\u95a2\u3059\u308b\u64cd\u4f5c\u304c\u7c21\u5358\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">use Symfony\\Component\\Finder\\Finder;\n\n$finder = new Finder();\n$finder-&gt;files()\n       -&gt;in('src\/')\n       -&gt;name('*.php')\n       -&gt;size('&gt; 10K')\n       -&gt;date('since yesterday');\n\nforeach ($finder as $file) {\n    \/\/ $file\u306fSplFileInfo\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\n    $absolutePath = $file-&gt;getRealPath();\n    $relativePath = $file-&gt;getRelativePathname();\n    $contents = $file-&gt;getContents();\n    \n    echo \"\u51e6\u7406\u4e2d: \" . $relativePath . PHP_EOL;\n    \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092\u51e6\u7406...\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-127\">\u30ab\u30b9\u30bf\u30e0\u30b9\u30c8\u30ea\u30fc\u30e0\u30e9\u30c3\u30d1\u30fc<\/h4>\n\n\n\n<p>Symfony\u3067\u306f\u3001PHP\u306e\u30b9\u30c8\u30ea\u30fc\u30e0\u30e9\u30c3\u30d1\u30fc\u3092\u4f7f\u3063\u305f\u9ad8\u5ea6\u306a\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u3082\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">use Symfony\\Component\\Filesystem\\Filesystem;\n\n$filesystem = new Filesystem();\n$tempDir = sys_get_temp_dir() . '\/symfony';\n$filesystem-&gt;mkdir($tempDir);\n\n\/\/ PHP\u306e\u30b9\u30c8\u30ea\u30fc\u30e0\u30e9\u30c3\u30d1\u30fc\u3092\u4f7f\u7528\n$handle = fopen('php:\/\/temp', 'r+');\nfwrite($handle, '\u30c6\u30b9\u30c8\u5185\u5bb9');\nrewind($handle);\n\n\/\/ \u30b9\u30c8\u30ea\u30fc\u30e0\u304b\u3089\u66f8\u304d\u8fbc\u307f\n$targetFile = $tempDir . '\/stream_content.txt';\n$targetHandle = fopen($targetFile, 'w');\nstream_copy_to_stream($handle, $targetHandle);\nfclose($handle);\nfclose($targetHandle);\n\necho \"\u5185\u5bb9: \" . file_get_contents($targetFile);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-128\">Flysystem\u306e\u7d71\u5408<\/h4>\n\n\n\n<p>Symfony\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001Laravel\u3067\u3082\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b <code>league\/flysystem<\/code> \u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u7d71\u5408\u3059\u308b\u3053\u3068\u3067\u3001\u30af\u30e9\u30a6\u30c9\u30b9\u30c8\u30ec\u30fc\u30b8\u306a\u3069\u306e\u6a5f\u80fd\u3092\u5229\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Flysystem\u3092\u4f7f\u3063\u305fS3\u64cd\u4f5c\u306e\u4f8b\nuse League\\Flysystem\\Filesystem;\nuse League\\Flysystem\\AwsS3v3\\AwsS3Adapter;\nuse Aws\\S3\\S3Client;\n\n\/\/ S3\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u521d\u671f\u5316\n$client = new S3Client([\n    'credentials' =&gt; [\n        'key'    =&gt; 'your-key',\n        'secret' =&gt; 'your-secret',\n    ],\n    'region' =&gt; 'your-region',\n    'version' =&gt; 'latest',\n]);\n\n$adapter = new AwsS3Adapter($client, 'your-bucket-name');\n$filesystem = new Filesystem($adapter);\n\n\/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\n$contents = $filesystem-&gt;read('file.txt');\n\n\/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u8fbc\u307f\n$filesystem-&gt;write('new-file.txt', '\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9');\n\n\/\/ \u4e00\u6642\u7684\u306aURL\u751f\u6210\n$url = $client-&gt;createPresignedRequest(\n    $client-&gt;getCommand('GetObject', [\n        'Bucket' =&gt; 'your-bucket-name',\n        'Key'    =&gt; 'file.txt'\n    ]),\n    '+30 minutes'\n)-&gt;getUri();\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-129\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5171\u901a\u306e\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u30d1\u30bf\u30fc\u30f3\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p>PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u3092\u884c\u3046\u969b\u306e\u5171\u901a\u30d1\u30bf\u30fc\u30f3\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u3067\u3001\u79fb\u690d\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-130\">\u4f9d\u5b58\u6027\u6ce8\u5165\u3092\u6d3b\u7528\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u30b5\u30fc\u30d3\u30b9<\/h4>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u95a2\u4fc2\u306a\u304f\u3001\u4f9d\u5b58\u6027\u6ce8\u5165\u3092\u4f7f\u3063\u3066\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u30b5\u30fc\u30d3\u30b9\u3092\u5b9f\u88c5\u3059\u308b\u3068\u3001\u30c6\u30b9\u30c8\u3084\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u5b9a\u7fa9\ninterface FileSystemInterface\n{\n    public function read(string $path): string;\n    public function write(string $path, string $contents): bool;\n    public function exists(string $path): bool;\n    public function delete(string $path): bool;\n    \/\/ \u4ed6\u306e\u30e1\u30bd\u30c3\u30c9...\n}\n\n\/\/ \u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u88c5\nclass LocalFileSystem implements FileSystemInterface\n{\n    private $basePath;\n    \n    public function __construct(string $basePath)\n    {\n        $this-&gt;basePath = rtrim($basePath, '\/');\n    }\n    \n    public function read(string $path): string\n    {\n        $fullPath = $this-&gt;getFullPath($path);\n        if (!file_exists($fullPath)) {\n            throw new \\Exception(\"File not found: $path\");\n        }\n        return file_get_contents($fullPath);\n    }\n    \n    public function write(string $path, string $contents): bool\n    {\n        $fullPath = $this-&gt;getFullPath($path);\n        $directory = dirname($fullPath);\n        \n        if (!is_dir($directory)) {\n            mkdir($directory, 0755, true);\n        }\n        \n        return file_put_contents($fullPath, $contents) !== false;\n    }\n    \n    public function exists(string $path): bool\n    {\n        return file_exists($this-&gt;getFullPath($path));\n    }\n    \n    public function delete(string $path): bool\n    {\n        if ($this-&gt;exists($path)) {\n            return unlink($this-&gt;getFullPath($path));\n        }\n        return false;\n    }\n    \n    private function getFullPath(string $path): string\n    {\n        return $this-&gt;basePath . '\/' . ltrim($path, '\/');\n    }\n}\n\n\/\/ S3\u306a\u3069\u306e\u30af\u30e9\u30a6\u30c9\u30b9\u30c8\u30ec\u30fc\u30b8\u5b9f\u88c5\u3082\u540c\u69d8\u306b\u4f5c\u6210\u53ef\u80fd\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-131\">\u30c6\u30b9\u30c8\u7528\u306e\u30e2\u30c3\u30af\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0<\/h4>\n\n\n\n<p>\u30c6\u30b9\u30c8\u6642\u306b\u306f\u3001\u5b9f\u969b\u306e\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u4f7f\u308f\u305a\u306b\u30e2\u30c3\u30af\u3092\u4f7f\u3046\u3053\u3068\u3067\u3001\u30c6\u30b9\u30c8\u306e\u5b9f\u884c\u901f\u5ea6\u3068\u4fe1\u983c\u6027\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c6\u30b9\u30c8\u7528\u306e\u30a4\u30f3\u30e1\u30e2\u30ea\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\nclass MockFileSystem implements FileSystemInterface\n{\n    private $files = [];\n    \n    public function read(string $path): string\n    {\n        if (!$this-&gt;exists($path)) {\n            throw new \\Exception(\"File not found: $path\");\n        }\n        return $this-&gt;files[$path];\n    }\n    \n    public function write(string $path, string $contents): bool\n    {\n        $this-&gt;files[$path] = $contents;\n        return true;\n    }\n    \n    public function exists(string $path): bool\n    {\n        return isset($this-&gt;files[$path]);\n    }\n    \n    public function delete(string $path): bool\n    {\n        if ($this-&gt;exists($path)) {\n            unset($this-&gt;files[$path]);\n            return true;\n        }\n        return false;\n    }\n}\n\n\/\/ \u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\u4f8b\npublic function testFileOperations()\n{\n    $fileSystem = new MockFileSystem();\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u66f8\u304d\u8fbc\u307f\u306e\u30c6\u30b9\u30c8\n    $this-&gt;assertTrue($fileSystem-&gt;write('test.txt', 'Hello World'));\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u5b58\u5728\u78ba\u8a8d\u306e\u30c6\u30b9\u30c8\n    $this-&gt;assertTrue($fileSystem-&gt;exists('test.txt'));\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u306e\u30c6\u30b9\u30c8\n    $this-&gt;assertEquals('Hello World', $fileSystem-&gt;read('test.txt'));\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u524a\u9664\u306e\u30c6\u30b9\u30c8\n    $this-&gt;assertTrue($fileSystem-&gt;delete('test.txt'));\n    $this-&gt;assertFalse($fileSystem-&gt;exists('test.txt'));\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-132\">\u8a2d\u5b9a\u306e\u62bd\u8c61\u5316<\/h4>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3054\u3068\u306e\u8a2d\u5b9a\u65b9\u6cd5\u3092\u62bd\u8c61\u5316\u3059\u308b\u3053\u3068\u3067\u3001\u79fb\u690d\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u304c\u66f8\u3051\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u8a2d\u5b9a\u30a2\u30c0\u30d7\u30bf\u30fc\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\ninterface ConfigAdapterInterface\n{\n    public function get(string $key, $default = null);\n}\n\n\/\/ Laravel\u7528\u306e\u8a2d\u5b9a\u30a2\u30c0\u30d7\u30bf\u30fc\nclass LaravelConfigAdapter implements ConfigAdapterInterface\n{\n    public function get(string $key, $default = null)\n    {\n        return config($key, $default);\n    }\n}\n\n\/\/ Symfony\u7528\u306e\u8a2d\u5b9a\u30a2\u30c0\u30d7\u30bf\u30fc\nclass SymfonyConfigAdapter implements ConfigAdapterInterface\n{\n    private $container;\n    \n    public function __construct($container)\n    {\n        $this-&gt;container = $container;\n    }\n    \n    public function get(string $key, $default = null)\n    {\n        try {\n            return $this-&gt;container-&gt;getParameter($key);\n        } catch (\\Exception $e) {\n            return $default;\n        }\n    }\n}\n\n\/\/ \u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u30d5\u30a1\u30af\u30c8\u30ea\nclass FileSystemFactory\n{\n    private $config;\n    \n    public function __construct(ConfigAdapterInterface $config)\n    {\n        $this-&gt;config = $config;\n    }\n    \n    public function create(string $type = 'local'): FileSystemInterface\n    {\n        switch ($type) {\n            case 'local':\n                $basePath = $this-&gt;config-&gt;get('filesystems.local.path', '\/tmp');\n                return new LocalFileSystem($basePath);\n            \n            case 's3':\n                $key = $this-&gt;config-&gt;get('filesystems.s3.key');\n                $secret = $this-&gt;config-&gt;get('filesystems.s3.secret');\n                $region = $this-&gt;config-&gt;get('filesystems.s3.region');\n                $bucket = $this-&gt;config-&gt;get('filesystems.s3.bucket');\n                \n                return new S3FileSystem($key, $secret, $region, $bucket);\n            \n            default:\n                throw new \\InvalidArgumentException(\"Unsupported filesystem type: $type\");\n        }\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-133\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u95a2\u4fc2\u306a\u304f\u3001\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u306b\u304a\u3051\u308b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306f\u5171\u901a\u3067\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u304b\u3089\u306e\u30d1\u30b9\u751f\u6210\u3092\u907f\u3051\u308b<\/strong>: \u30e6\u30fc\u30b6\u30fc\u5165\u529b\u3092\u542b\u3080\u30d1\u30b9\u3092\u69cb\u7bc9\u3059\u308b\u5834\u5408\u306f\u3001\u53b3\u683c\u306a\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3068\u30b5\u30cb\u30bf\u30a4\u30ba\u3092\u884c\u3046<\/li>\n\n\n\n<li><strong>\u8a31\u53ef\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3059\u308b<\/strong>: \u8a31\u53ef\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u3084\u64cd\u4f5c\u306e\u307f\u3092\u8a31\u53ef\u3059\u308b<\/li>\n\n\n\n<li><strong>\u30d1\u30b9\u306e\u6b63\u898f\u5316<\/strong>: <code>realpath()<\/code>\u3092\u4f7f\u7528\u3057\u3066\u30d1\u30b9\u3092\u6b63\u898f\u5316\u3057\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30c8\u30e9\u30d0\u30fc\u30b5\u30eb\u653b\u6483\u3092\u9632\u3050<\/li>\n\n\n\n<li><strong>\u30d5\u30a1\u30a4\u30eb\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/strong>: \u6700\u5c0f\u6a29\u9650\u306e\u539f\u5247\u306b\u5f93\u3044\u3001\u5fc5\u8981\u6700\u5c0f\u9650\u306e\u6a29\u9650\u3092\u8a2d\u5b9a\u3059\u308b<\/li>\n\n\n\n<li><strong>\u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u306e\u5b89\u5168\u306a\u53d6\u308a\u6271\u3044<\/strong>: \u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u3092\u9069\u5207\u306b\u524a\u9664\u3057\u3001\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u3092\u5236\u9650\u3059\u308b<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5b89\u5168\u306a\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306e\u69cb\u7bc9\nfunction getSafePath(string $userInput, string $basePath): ?string\n{\n    \/\/ \u5371\u967a\u306a\u6587\u5b57\u3092\u524a\u9664\n    $safeFilename = preg_replace('\/[^a-zA-Z0-9_\\-\\.]\/', '', basename($userInput));\n    \n    \/\/ \u5b8c\u5168\u306a\u30d1\u30b9\u3092\u69cb\u7bc9\n    $fullPath = $basePath . '\/' . $safeFilename;\n    \n    \/\/ \u30d1\u30b9\u3092\u6b63\u898f\u5316\n    $realPath = realpath($fullPath);\n    \n    \/\/ \u30d1\u30b9\u304c\u30d9\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u3042\u308b\u304b\u78ba\u8a8d\n    if ($realPath === false || strpos($realPath, realpath($basePath)) !== 0) {\n        return null; \/\/ \u5b89\u5168\u3067\u306a\u3044\u30d1\u30b9\n    }\n    \n    return $realPath;\n}\n<\/pre>\n\n\n\n<p>\u30e2\u30c0\u30f3\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u304c\u62bd\u8c61\u5316\u3055\u308c\u3001\u30b7\u30f3\u30d7\u30eb\u3067\u7d71\u4e00\u3055\u308c\u305f\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u901a\u3058\u3066\u69d8\u3005\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u3084\u5404\u7a2e\u30af\u30e9\u30a6\u30c9\u30b9\u30c8\u30ec\u30fc\u30b8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u540c\u3058API\u3067\u884c\u3048\u308b\u305f\u3081\u3001\u5c06\u6765\u7684\u306a\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u5909\u66f4\u3084\u62e1\u5f35\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>Laravel\u3068Symfony\u3067\u306f\u30a2\u30d7\u30ed\u30fc\u30c1\u304c\u82e5\u5e72\u7570\u306a\u308a\u307e\u3059\u304c\u3001\u4e21\u8005\u3068\u3082\u9ad8\u5ea6\u306a\u62bd\u8c61\u5316\u3092\u63d0\u4f9b\u3057\u3066\u304a\u308a\u3001\u76f4\u63a5PHP\u306e\u30d5\u30a1\u30a4\u30eb\u95a2\u6570\u3092\u4f7f\u7528\u3059\u308b\u3088\u308a\u3082\u591a\u304f\u306e\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\u3002\u7279\u306b\u3001\u30c6\u30b9\u30c8\u5bb9\u6613\u6027\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3001\u62e1\u5f35\u6027\u306e\u9762\u3067\u512a\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u4f9d\u5b58\u3057\u306a\u3044\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3053\u3068\u304c\u91cd\u8981\u306a\u5834\u5408\u306f\u3001\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u7d39\u4ecb\u3057\u305f\u62bd\u8c61\u5316\u30d1\u30bf\u30fc\u30f3\u3092\u6d3b\u7528\u3057\u3001\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u3092\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u80cc\u5f8c\u306b\u96a0\u3059\u3053\u3068\u3067\u3001\u79fb\u690d\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-134\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u4e00\u822c\u7684\u306a\u554f\u984c\u306e\u89e3\u6c7a\u6cd5<\/h2>\n\n\n\n<p>PHP\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u306f\u3001\u69d8\u3005\u306a\u74b0\u5883\u8981\u56e0\u306b\u3088\u3063\u3066\u5f71\u97ff\u3092\u53d7\u3051\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u3001\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u6a29\u9650\u3001\u6587\u5b57\u30b3\u30fc\u30c9\u306e\u9055\u3044\u306a\u3069\u3001\u591a\u304f\u306e\u8981\u7d20\u304c\u554f\u984c\u3092\u5f15\u304d\u8d77\u3053\u3059\u539f\u56e0\u3068\u306a\u308a\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u6642\u306b\u3088\u304f\u767a\u751f\u3059\u308b\u554f\u984c\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-135\">\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u95a2\u9023\u306e\u554f\u984c\u3092\u7279\u5b9a\u3057\u3066\u89e3\u6c7a\u3059\u308b<\/h3>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u3067\u6700\u3082\u983b\u7e41\u306b\u767a\u751f\u3059\u308b\u554f\u984c\u306e\u4e00\u3064\u304c\u3001\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\uff08\u30a2\u30af\u30bb\u30b9\u6a29\u9650\uff09\u95a2\u9023\u306e\u554f\u984c\u3067\u3059\u3002\u7279\u306bLinux\/Unix\u30d9\u30fc\u30b9\u306e\u30b5\u30fc\u30d0\u30fc\u3067\u306f\u3001\u9069\u5207\u306a\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u8a2d\u5b9a\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-136\">\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u554f\u984c\u306e\u8a3a\u65ad<\/h4>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u304c\u8aad\u307f\u8fbc\u3081\u306a\u3044\u5834\u5408\u3001\u307e\u305a\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u306e\u554f\u984c\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u95a2\u9023\u306e\u554f\u984c\u3092\u8a3a\u65ad\nfunction diagnosePermissionIssue($filePath) {\n    $issues = [];\n    \n    \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u30c1\u30a7\u30c3\u30af\n    if (!file_exists($filePath)) {\n        $issues[] = \"\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u305b\u3093: $filePath\";\n        return $issues;\n    }\n    \n    \/\/ \u8aad\u307f\u53d6\u308a\u6a29\u9650\u306e\u30c1\u30a7\u30c3\u30af\n    if (!is_readable($filePath)) {\n        $issues[] = \"\u30d5\u30a1\u30a4\u30eb\u306b\u8aad\u307f\u53d6\u308a\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\";\n        \n        \/\/ \u8a73\u7d30\u306a\u6a29\u9650\u60c5\u5831\u3092\u53d6\u5f97\n        $perms = fileperms($filePath);\n        $issues[] = sprintf(\"\u73fe\u5728\u306e\u6a29\u9650: %o\", $perms &amp; 0777);\n        \n        \/\/ \u6240\u6709\u8005\u3068\u6240\u5c5e\u30b0\u30eb\u30fc\u30d7\u306e\u78ba\u8a8d\n        $owner = posix_getpwuid(fileowner($filePath));\n        $group = posix_getgrgid(filegroup($filePath));\n        $issues[] = \"\u6240\u6709\u8005: {$owner['name']}, \u30b0\u30eb\u30fc\u30d7: {$group['name']}\";\n        \n        \/\/ PHP\u306e\u5b9f\u884c\u30e6\u30fc\u30b6\u30fc\u3092\u78ba\u8a8d\n        $currentUser = posix_getpwuid(posix_geteuid());\n        $issues[] = \"PHP\u306e\u5b9f\u884c\u30e6\u30fc\u30b6\u30fc: {$currentUser['name']}\";\n    }\n    \n    \/\/ \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u5834\u5408\n    if (is_dir($filePath)) {\n        if (!is_executable($filePath)) {\n            $issues[] = \"\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u5b9f\u884c\uff08\u30a2\u30af\u30bb\u30b9\uff09\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\";\n        }\n    }\n    \n    \/\/ \u89aa\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u3082\u78ba\u8a8d\n    $parentDir = dirname($filePath);\n    if (!is_readable($parentDir) || !is_executable($parentDir)) {\n        $issues[] = \"\u89aa\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093: $parentDir\";\n    }\n    \n    return $issues;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$issues = diagnosePermissionIssue('\/var\/www\/data\/config.json');\nif (!empty($issues)) {\n    echo \"\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u554f\u984c\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f:\\n\";\n    foreach ($issues as $issue) {\n        echo \"- $issue\\n\";\n    }\n    echo \"\\n\u89e3\u6c7a\u7b56\u306e\u63d0\u6848:\\n\";\n    echo \"1. \u30d5\u30a1\u30a4\u30eb\u306e\u6a29\u9650\u3092\u5909\u66f4: chmod 644 \/var\/www\/data\/config.json\\n\";\n    echo \"2. \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u6a29\u9650\u3092\u5909\u66f4: chmod 755 \/var\/www\/data\/\\n\";\n    echo \"3. \u6240\u6709\u8005\u3092\u5909\u66f4: chown www-data:www-data \/var\/www\/data\/config.json\\n\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-137\">\u4e00\u822c\u7684\u306a\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u8a2d\u5b9a<\/h4>\n\n\n\n<p>Web\u30b5\u30fc\u30d0\u30fc\u74b0\u5883\u3067\u306e\u4e00\u822c\u7684\u306a\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u8a2d\u5b9a\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n<div id=\"id-a3468abf-f413-441c-9d10-2d222b40d002\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u9805\u76ee<\/th><th>\u63a8\u5968\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3<\/th><th>\u8aac\u660e<\/th><\/tr><\/thead><tbody><tr><td>\u901a\u5e38\u30d5\u30a1\u30a4\u30eb<\/td><td>644 (rw-r\u2013r\u2013)<\/td><td>\u6240\u6709\u8005\u306f\u8aad\u307f\u66f8\u304d\u53ef\u80fd\u3001\u4ed6\u306e\u30e6\u30fc\u30b6\u30fc\u306f\u8aad\u307f\u53d6\u308a\u306e\u307f<\/td><\/tr><tr><td>\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb<\/td><td>755 (rwxr-xr-x)<\/td><td>\u6240\u6709\u8005\u306f\u5168\u6a29\u9650\u3001\u4ed6\u306e\u30e6\u30fc\u30b6\u30fc\u306f\u8aad\u307f\u53d6\u308a\u3068\u5b9f\u884c\u306e\u307f<\/td><\/tr><tr><td>\u30c7\u30a3\u30ec\u30af\u30c8\u30ea<\/td><td>755 (rwxr-xr-x)<\/td><td>\u6240\u6709\u8005\u306f\u5168\u6a29\u9650\u3001\u4ed6\u306e\u30e6\u30fc\u30b6\u30fc\u306f\u95b2\u89a7\u3068\u30a2\u30af\u30bb\u30b9\u306e\u307f<\/td><\/tr><tr><td>\u6a5f\u5bc6\u30d5\u30a1\u30a4\u30eb<\/td><td>600 (rw\u2014\u2014-)<\/td><td>\u6240\u6709\u8005\u306e\u307f\u30a2\u30af\u30bb\u30b9\u53ef\u80fd<\/td><\/tr><tr><td>\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea<\/td><td>775 (rwxrwxr-x)<\/td><td>Web\u30b5\u30fc\u30d0\u30fc\u304c\u30d5\u30a1\u30a4\u30eb\u3092\u66f8\u304d\u8fbc\u3081\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-138\">\u6240\u6709\u8005\u3068\u30b0\u30eb\u30fc\u30d7\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u306e\u6240\u6709\u8005\u3068\u30b0\u30eb\u30fc\u30d7\u306f\u3001\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u4e0a\u3067\u91cd\u8981\u306a\u8981\u7d20\u3067\u3059\u3002\u4e00\u822c\u7684\u306b\u3001Web\u30b5\u30fc\u30d0\u30fc\u306e\u5b9f\u884c\u30e6\u30fc\u30b6\u30fc\uff08\u591a\u304f\u306e\u5834\u5408<code>www-data<\/code>\u3001<code>apache<\/code>\u3001<code>nginx<\/code>\u306a\u3069\uff09\u304c\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u66f8\u304d\u3067\u304d\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Web\u30b5\u30fc\u30d0\u30fc\u30e6\u30fc\u30b6\u30fc\u306b\u30d5\u30a1\u30a4\u30eb\u6240\u6709\u6a29\u3092\u4e0e\u3048\u308b\nchown www-data:www-data \/var\/www\/data\/uploads\/\n\n# \u65e2\u5b58\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u4eca\u5f8c\u4f5c\u6210\u3055\u308c\u308b\u30d5\u30a1\u30a4\u30eb\u306e\u4e21\u65b9\u306b\u9069\u5207\u306a\u6a29\u9650\u3092\u8a2d\u5b9a\nfind \/var\/www\/data\/uploads\/ -type f -exec chmod 644 {} \\;\nfind \/var\/www\/data\/uploads\/ -type d -exec chmod 755 {} \\;\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-139\">PHP\u304b\u3089\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3092\u5909\u66f4\u3059\u308b<\/h4>\n\n\n\n<p>PHP\u30b9\u30af\u30ea\u30d7\u30c8\u5185\u304b\u3089\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u304c\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4e0a\u306e\u7406\u7531\u304b\u3089\u3001\u5341\u5206\u306a\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5fc5\u8981\u306a\u5834\u5408\u306b\u306e\u307f\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u3092\u8abf\u6574\u3059\u308b\u95a2\u6570\nfunction ensureReadablePermission($filePath) {\n    \/\/ \u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u3001\u8aad\u307f\u53d6\u308a\u4e0d\u53ef\u306e\u5834\u5408\u306e\u307f\u6a29\u9650\u3092\u5909\u66f4\n    if (file_exists($filePath) &amp;&amp; !is_readable($filePath)) {\n        \/\/ \u73fe\u5728\u306e\u6a29\u9650\u3092\u53d6\u5f97\n        $currentPerms = fileperms($filePath) &amp; 0777;\n        \n        \/\/ \u8aad\u307f\u53d6\u308a\u6a29\u9650\u3092\u8ffd\u52a0\uff08\u6240\u6709\u8005\u3001\u30b0\u30eb\u30fc\u30d7\u3001\u305d\u306e\u4ed6\u3059\u3079\u3066\u306b\u8aad\u307f\u53d6\u308a\u6a29\u9650\u3092\u4ed8\u4e0e\uff09\n        $newPerms = $currentPerms | 0444;\n        \n        \/\/ \u6a29\u9650\u3092\u5909\u66f4\n        if (!chmod($filePath, $newPerms)) {\n            throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u306e\u6a29\u9650\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: $filePath\");\n        }\n        \n        return true;\n    }\n    \n    return false;\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-140\">\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u554f\u984c\u306b\u5bfe\u51e6\u3059\u308b\u305f\u3081\u306e\u5b9f\u7528\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u306e\u6587\u5b57\u30b3\u30fc\u30c9\uff08\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\uff09\u306e\u554f\u984c\u306f\u3001\u7279\u306b\u56fd\u969b\u7684\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084\u591a\u8a00\u8a9e\u5bfe\u5fdc\u304c\u5fc5\u8981\u306a\u30b1\u30fc\u30b9\u3067\u983b\u7e41\u306b\u767a\u751f\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-141\">\u6587\u5b57\u30b3\u30fc\u30c9\u306e\u691c\u51fa<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u6587\u5b57\u30b3\u30fc\u30c9\u3092\u691c\u51fa\nfunction detectEncoding($filePath, $possibleEncodings = ['UTF-8', 'SJIS', 'EUC-JP', 'ISO-8859-1']) {\n    \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092\u8aad\u307f\u8fbc\u3080\n    $content = file_get_contents($filePath);\n    if ($content === false) {\n        throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f: $filePath\");\n    }\n    \n    \/\/ mb_detect_encoding\u3092\u4f7f\u7528\u3057\u3066\u6587\u5b57\u30b3\u30fc\u30c9\u3092\u691c\u51fa\n    $encoding = mb_detect_encoding($content, $possibleEncodings, true);\n    \n    \/\/ \u691c\u51fa\u3067\u304d\u306a\u3044\u5834\u5408\u306fBOM\u3092\u30c1\u30a7\u30c3\u30af\n    if ($encoding === false) {\n        \/\/ UTF-8 BOM\n        if (substr($content, 0, 3) === \"\\xEF\\xBB\\xBF\") {\n            return 'UTF-8 with BOM';\n        }\n        \/\/ UTF-16 BE BOM\n        if (substr($content, 0, 2) === \"\\xFE\\xFF\") {\n            return 'UTF-16BE with BOM';\n        }\n        \/\/ UTF-16 LE BOM\n        if (substr($content, 0, 2) === \"\\xFF\\xFE\") {\n            return 'UTF-16LE with BOM';\n        }\n        \n        return 'unknown';\n    }\n    \n    return $encoding;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\ntry {\n    $encoding = detectEncoding('\/path\/to\/file.txt');\n    echo \"\u30d5\u30a1\u30a4\u30eb\u306e\u6587\u5b57\u30b3\u30fc\u30c9: $encoding\\n\";\n} catch (Exception $e) {\n    echo \"\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage() . \"\\n\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-142\">\u6587\u5b57\u30b3\u30fc\u30c9\u306e\u5909\u63db<\/h4>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u306e\u6587\u5b57\u30b3\u30fc\u30c9\u3092\u5909\u63db\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001<code>mb_convert_encoding<\/code>\u95a2\u6570\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u6587\u5b57\u30b3\u30fc\u30c9\u3092\u5909\u63db\nfunction convertFileEncoding($sourcePath, $targetPath, $sourceEncoding = null, $targetEncoding = 'UTF-8') {\n    \/\/ \u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092\u8aad\u307f\u8fbc\u3080\n    $content = file_get_contents($sourcePath);\n    if ($content === false) {\n        throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f: $sourcePath\");\n    }\n    \n    \/\/ \u5143\u306e\u6587\u5b57\u30b3\u30fc\u30c9\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u691c\u51fa\u3092\u8a66\u307f\u308b\n    if ($sourceEncoding === null) {\n        $sourceEncoding = detectEncoding($sourcePath);\n        if ($sourceEncoding === 'unknown') {\n            throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u306e\u6587\u5b57\u30b3\u30fc\u30c9\u3092\u691c\u51fa\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\");\n        }\n    }\n    \n    \/\/ BOM\u3092\u51e6\u7406\n    if ($sourceEncoding === 'UTF-8 with BOM') {\n        $sourceEncoding = 'UTF-8';\n        $content = substr($content, 3); \/\/ BOM\u3092\u524a\u9664\n    }\n    \n    \/\/ \u6587\u5b57\u30b3\u30fc\u30c9\u3092\u5909\u63db\n    $convertedContent = mb_convert_encoding($content, $targetEncoding, $sourceEncoding);\n    \n    \/\/ \u5909\u63db\u3055\u308c\u305f\u5185\u5bb9\u3092\u66f8\u304d\u8fbc\u3080\n    if (file_put_contents($targetPath, $convertedContent) === false) {\n        throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f: $targetPath\");\n    }\n    \n    return true;\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-143\">\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u95a2\u9023\u306e\u554f\u984c\u3092\u56de\u907f\u3059\u308b\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5e38\u306bUTF-8\u3092\u4f7f\u7528\u3059\u308b<\/strong>: \u65b0\u3057\u3044\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3059\u308b\u969b\u306f\u3001\u5e38\u306bUTF-8\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u4f7f\u7528\u3057\u3001BOM\u306a\u3057\u3067\u4fdd\u5b58\u3059\u308b<\/li>\n\n\n\n<li><strong>mb_*\u95a2\u6570\u3092\u6d3b\u7528\u3059\u308b<\/strong>: \u6587\u5b57\u5217\u64cd\u4f5c\u306b\u306f\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u5bfe\u5fdc\u306e<code>mb_*<\/code>\u95a2\u6570\u3092\u4f7f\u7528\u3059\u308b<\/li>\n\n\n\n<li><strong>\u5165\u51fa\u529b\u306e\u6587\u5b57\u30b3\u30fc\u30c9\u3092\u660e\u793a\u7684\u306b\u6307\u5b9a\u3059\u308b<\/strong>: \u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u66f8\u304d\u5f8c\u306b\u660e\u793a\u7684\u306b\u6587\u5b57\u30b3\u30fc\u30c9\u5909\u63db\u3092\u884c\u3046<\/li>\n\n\n\n<li><strong>HTML\u3067\u306e\u6587\u5b57\u30b3\u30fc\u30c9\u6307\u5b9a<\/strong>: Web\u30da\u30fc\u30b8\u3067\u306f<code>&lt;meta charset=\"UTF-8\"&gt;<\/code>\u3092\u8a2d\u5b9a\u3059\u308b<\/li>\n\n\n\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u6587\u5b57\u30b3\u30fc\u30c9\u8a2d\u5b9a<\/strong>: \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u3068\u30c6\u30fc\u30d6\u30eb\u306e\u6587\u5b57\u30b3\u30fc\u30c9\u8a2d\u5b9a\u3082\u5408\u308f\u305b\u308b<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u6587\u5b57\u3092\u9069\u5207\u306b\u51e6\u7406\u3059\u308b\u4f8b\nfunction safelyProcessMultibyteText($text) {\n    \/\/ \u5185\u90e8\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3092UTF-8\u306b\u8a2d\u5b9a\n    mb_internal_encoding('UTF-8');\n    \n    \/\/ \u6587\u5b57\u5217\u306e\u9577\u3055\u3092\u53d6\u5f97\uff08\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u5bfe\u5fdc\uff09\n    $length = mb_strlen($text);\n    \n    \/\/ \u90e8\u5206\u6587\u5b57\u5217\u306e\u53d6\u5f97\uff08\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u5bfe\u5fdc\uff09\n    $firstChar = mb_substr($text, 0, 1);\n    \n    \/\/ \u5927\u6587\u5b57\u5c0f\u6587\u5b57\u5909\u63db\uff08\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u5bfe\u5fdc\uff09\n    $upperCase = mb_strtoupper($text);\n    \n    \/\/ \u6587\u5b57\u4f4d\u7f6e\u306e\u691c\u7d22\uff08\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u5bfe\u5fdc\uff09\n    $position = mb_strpos($text, '\u691c\u7d22');\n    \n    return [\n        'length' =&gt; $length,\n        'first_char' =&gt; $firstChar,\n        'uppercase' =&gt; $upperCase,\n        'position' =&gt; $position\n    ];\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-144\">\u65e5\u672c\u8a9e\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u306e\u30b1\u30fc\u30b9\u30b9\u30bf\u30c7\u30a3<\/h4>\n\n\n\n<p>\u65e5\u672c\u8a9e\u30d5\u30a1\u30a4\u30eb\u3092\u6271\u3046\u5834\u5408\u306e\u4e00\u822c\u7684\u306a\u554f\u984c\u3068\u89e3\u6c7a\u7b56\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u65e5\u672c\u8a9e\u30d5\u30a1\u30a4\u30eb\u540d\u306e\u6271\u3044\nfunction handleJapaneseFilename($filename) {\n    \/\/ \u30d5\u30a1\u30a4\u30eb\u540d\u3092URL\u30a8\u30f3\u30b3\u30fc\u30c9\n    $encodedFilename = rawurlencode($filename);\n    \n    \/\/ \u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u6642\u306e\u30d8\u30c3\u30c0\u30fc\u8a2d\u5b9a\n    header('Content-Type: application\/octet-stream');\n    header('Content-Disposition: attachment; filename*=UTF-8\\'\\'' . $encodedFilename);\n    \n    return $encodedFilename;\n}\n\n\/\/ CSV\u30d5\u30a1\u30a4\u30eb\u306e\u6587\u5b57\u30b3\u30fc\u30c9\u5909\u63db\nfunction convertCsvEncoding($sourcePath, $targetPath, $sourceEncoding = 'SJIS', $targetEncoding = 'UTF-8') {\n    $handle = fopen($sourcePath, 'r');\n    if ($handle === false) {\n        throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f: $sourcePath\");\n    }\n    \n    $output = fopen($targetPath, 'w');\n    if ($output === false) {\n        fclose($handle);\n        throw new Exception(\"\u51fa\u529b\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f: $targetPath\");\n    }\n    \n    \/\/ BOM\u3092\u8ffd\u52a0\uff08UTF-8\u306e\u5834\u5408\uff09\n    if ($targetEncoding === 'UTF-8') {\n        fwrite($output, \"\\xEF\\xBB\\xBF\");\n    }\n    \n    \/\/ 1\u884c\u305a\u3064\u8aad\u307f\u8fbc\u3093\u3067\u5909\u63db\n    while (($line = fgets($handle)) !== false) {\n        $convertedLine = mb_convert_encoding($line, $targetEncoding, $sourceEncoding);\n        fwrite($output, $convertedLine);\n    }\n    \n    fclose($handle);\n    fclose($output);\n    \n    return true;\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-145\">PHP\u306e\u30e1\u30e2\u30ea\u5236\u9650\u3092\u56de\u907f\u3059\u308b\u9ad8\u5ea6\u306a\u65b9\u6cd5<\/h3>\n\n\n\n<p>PHP\u306b\u306f\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u4f7f\u7528\u3067\u304d\u308b\u30e1\u30e2\u30ea\u91cf\u306b\u5236\u9650\u304c\u3042\u308a\u307e\u3059\u3002\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3059\u308b\u969b\u306b\u3053\u306e\u5236\u9650\u306b\u9054\u3059\u308b\u3068\u3001\u300cAllowed memory size of X bytes exhausted\u300d\u3068\u3044\u3046\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-146\">\u30e1\u30e2\u30ea\u5236\u9650\u306e\u78ba\u8a8d\u3068\u8abf\u6574<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u73fe\u5728\u306e\u30e1\u30e2\u30ea\u5236\u9650\u3092\u78ba\u8a8d\necho \"\u73fe\u5728\u306e\u30e1\u30e2\u30ea\u5236\u9650: \" . ini_get('memory_limit') . \"\\n\";\n\n\/\/ \u30b9\u30af\u30ea\u30d7\u30c8\u5185\u3067\u30e1\u30e2\u30ea\u5236\u9650\u3092\u4e00\u6642\u7684\u306b\u5f15\u304d\u4e0a\u3052\u308b\nini_set('memory_limit', '256M');\n\n\/\/ \u307e\u305f\u306f\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u7121\u5236\u9650\u306b\u8a2d\u5b9a\uff08\u672c\u756a\u74b0\u5883\u3067\u306f\u6ce8\u610f\u304c\u5fc5\u8981\uff09\n\/\/ ini_set('memory_limit', '-1');\n\necho \"\u65b0\u3057\u3044\u30e1\u30e2\u30ea\u5236\u9650: \" . ini_get('memory_limit') . \"\\n\";\n<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\u6ce8\u610f<\/strong>: <code>ini_set()<\/code>\u3067\u30e1\u30e2\u30ea\u5236\u9650\u3092\u5909\u66f4\u3059\u308b\u306b\u306f\u3001<code>php.ini<\/code>\u306e\u8a2d\u5b9a\u3067\u8a31\u53ef\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30b5\u30fc\u30d0\u30fc\u74b0\u5883\u306b\u3088\u3063\u3066\u306f\u5236\u9650\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-147\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u76e3\u8996<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u76e3\u8996\u3059\u308b\u95a2\u6570\nfunction monitorMemoryUsage($label = '') {\n    $current = memory_get_usage() \/ 1024 \/ 1024;\n    $peak = memory_get_peak_usage() \/ 1024 \/ 1024;\n    \n    echo sprintf(\"%s - \u73fe\u5728\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf: %.2f MB, \u30d4\u30fc\u30af: %.2f MB\\n\",\n        $label, $current, $peak);\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nmonitorMemoryUsage('\u521d\u671f\u72b6\u614b');\n\n$largeArray = [];\nfor ($i = 0; $i &lt; 100000; $i++) {\n    $largeArray[] = str_repeat('x', 100);\n}\n\nmonitorMemoryUsage('\u914d\u5217\u4f5c\u6210\u5f8c');\n\nunset($largeArray);\ngc_collect_cycles();\n\nmonitorMemoryUsage('\u914d\u5217\u89e3\u653e\u5f8c');\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-148\">\u30b9\u30c8\u30ea\u30fc\u30e0\u51e6\u7406\u306b\u3088\u308b\u30e1\u30e2\u30ea\u52b9\u7387\u306e\u5411\u4e0a<\/h4>\n\n\n\n<p>\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406\u3059\u308b\u306b\u306f\u3001\u4e00\u5ea6\u306b\u5168\u4f53\u3092\u8aad\u307f\u8fbc\u3080\u306e\u3067\u306f\u306a\u304f\u3001\u30b9\u30c8\u30ea\u30fc\u30e0\u51e6\u7406\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5927\u304d\u306aCSV\u30d5\u30a1\u30a4\u30eb\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406\u3059\u308b\nfunction processLargeCsv($filePath, $callback) {\n    $handle = fopen($filePath, 'r');\n    if ($handle === false) {\n        throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f: $filePath\");\n    }\n    \n    $headers = fgetcsv($handle);\n    if ($headers === false) {\n        fclose($handle);\n        throw new Exception(\"CSV\u30d8\u30c3\u30c0\u30fc\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\");\n    }\n    \n    $rowCount = 0;\n    $memoryUsages = [];\n    \n    \/\/ \u884c\u3054\u3068\u306b\u51e6\u7406\n    while (($row = fgetcsv($handle)) !== false) {\n        $rowCount++;\n        \n        \/\/ \u30d8\u30c3\u30c0\u30fc\u3068\u30c7\u30fc\u30bf\u3092\u9023\u60f3\u914d\u5217\u306b\u5909\u63db\n        $data = array_combine($headers, $row);\n        \n        \/\/ \u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\u3067\u51e6\u7406\n        $callback($data, $rowCount);\n        \n        \/\/ \u30e1\u30e2\u30ea\u4f7f\u7528\u72b6\u6cc1\u3092\u5b9a\u671f\u7684\u306b\u8a18\u9332\n        if ($rowCount % 10000 === 0) {\n            $memoryUsages[$rowCount] = memory_get_usage() \/ 1024 \/ 1024;\n        }\n        \n        \/\/ \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u9632\u3050\u305f\u3081\u306b\u5909\u6570\u3092\u89e3\u653e\n        unset($data);\n        unset($row);\n    }\n    \n    fclose($handle);\n    \n    \/\/ \u30e1\u30e2\u30ea\u4f7f\u7528\u72b6\u6cc1\u306e\u5909\u5316\u3092\u8868\u793a\n    foreach ($memoryUsages as $count =&gt; $usage) {\n        echo sprintf(\"%d\u884c\u51e6\u7406\u5f8c\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf: %.2f MB\\n\", $count, $usage);\n    }\n    \n    return $rowCount;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\ntry {\n    $processedRows = processLargeCsv('large_data.csv', function($data, $rowNum) {\n        \/\/ \u5404\u884c\u306e\u30c7\u30fc\u30bf\u3092\u51e6\u7406\n        if (isset($data['important_field']) &amp;&amp; $data['important_field'] &gt; 1000) {\n            \/\/ \u4f55\u3089\u304b\u306e\u51e6\u7406...\n        }\n        \n        \/\/ \u9032\u6357\u8868\u793a\n        if ($rowNum % 10000 === 0) {\n            echo \"\u51e6\u7406\u4e2d: $rowNum \u884c\u76ee\\r\";\n        }\n    });\n    \n    echo \"\u5408\u8a08 $processedRows \u884c\u3092\u51e6\u7406\u3057\u307e\u3057\u305f\\n\";\n} catch (Exception $e) {\n    echo \"\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage() . \"\\n\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-149\">XML\u306e\u5927\u898f\u6a21\u30d5\u30a1\u30a4\u30eb\u51e6\u7406<\/h4>\n\n\n\n<p>XML\u306e\u3088\u3046\u306a\u968e\u5c64\u69cb\u9020\u306e\u30c7\u30fc\u30bf\u3082\u3001XMLReader \u3092\u4f7f\u7528\u3057\u3066\u52b9\u7387\u7684\u306b\u51e6\u7406\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5927\u898f\u6a21XML\u30d5\u30a1\u30a4\u30eb\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406\nfunction processLargeXml($filePath, $elementName, $callback) {\n    $reader = new XMLReader();\n    if (!$reader-&gt;open($filePath)) {\n        throw new Exception(\"XML\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f: $filePath\");\n    }\n    \n    $count = 0;\n    \n    \/\/ \u6307\u5b9a\u3055\u308c\u305f\u8981\u7d20\u3092\u691c\u7d22\u3057\u306a\u304c\u3089\u8aad\u307f\u8fbc\u307f\n    while ($reader-&gt;read()) {\n        if ($reader-&gt;nodeType === XMLReader::ELEMENT &amp;&amp; $reader-&gt;name === $elementName) {\n            \/\/ \u73fe\u5728\u306e\u8981\u7d20\u3092\u30b7\u30f3\u30d7\u30ebXML\u3068\u3057\u3066\u53d6\u5f97\n            $node = $reader-&gt;readOuterXml();\n            \n            \/\/ SimpleXML\u306b\u5909\u63db\u3057\u3066\u51e6\u7406\n            $xml = simplexml_load_string($node);\n            \n            $count++;\n            \n            \/\/ \u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\u3067\u51e6\u7406\n            $callback($xml, $count);\n            \n            \/\/ \u30e1\u30e2\u30ea\u3092\u89e3\u653e\n            unset($xml);\n            unset($node);\n            \n            \/\/ \u5b9a\u671f\u7684\u306b\u30ac\u30d9\u30fc\u30b8\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\n            if ($count % 1000 === 0) {\n                gc_collect_cycles();\n            }\n        }\n    }\n    \n    $reader-&gt;close();\n    \n    return $count;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\ntry {\n    $processedElements = processLargeXml('large_data.xml', 'item', function($element, $count) {\n        \/\/ \u8981\u7d20\u3092\u51e6\u7406\n        $id = (string)$element-&gt;id;\n        $name = (string)$element-&gt;name;\n        \n        \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3059\u308b\u306a\u3069\u306e\u51e6\u7406\n        \n        \/\/ \u9032\u6357\u8868\u793a\n        if ($count % 1000 === 0) {\n            echo \"\u51e6\u7406\u4e2d: $count \u8981\u7d20\u76ee\\r\";\n        }\n    });\n    \n    echo \"\u5408\u8a08 $processedElements \u8981\u7d20\u3092\u51e6\u7406\u3057\u307e\u3057\u305f\\n\";\n} catch (Exception $e) {\n    echo \"\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage() . \"\\n\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-150\">Generator\u3092\u4f7f\u3063\u305f\u52b9\u7387\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u51e6\u7406<\/h4>\n\n\n\n<p>PHP 5.5\u4ee5\u964d\u3067\u306f\u3001Generator\u3092\u4f7f\u7528\u3057\u3066\u30e1\u30e2\u30ea\u52b9\u7387\u306e\u826f\u3044\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Generator\u3092\u4f7f\u3063\u3066\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u884c\u5358\u4f4d\u3067\u51e6\u7406\nfunction yieldLinesFromFile($filePath) {\n    $handle = fopen($filePath, 'r');\n    if ($handle === false) {\n        throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3051\u307e\u305b\u3093\u3067\u3057\u305f: $filePath\");\n    }\n    \n    while (($line = fgets($handle)) !== false) {\n        yield trim($line);\n    }\n    \n    fclose($handle);\n}\n\n\/\/ \u4f7f\u7528\u4f8b\ntry {\n    $lineCount = 0;\n    \n    foreach (yieldLinesFromFile('very_large_log.txt') as $line) {\n        $lineCount++;\n        \n        \/\/ \u884c\u3092\u51e6\u7406\n        if (strpos($line, 'ERROR') !== false) {\n            echo \"\u30a8\u30e9\u30fc\u767a\u898b\uff08\u884c $lineCount\uff09: $line\\n\";\n        }\n        \n        \/\/ \u9032\u6357\u8868\u793a\n        if ($lineCount % 100000 === 0) {\n            echo \"\u51e6\u7406\u4e2d: $lineCount \u884c\u76ee\\r\";\n        }\n    }\n    \n    echo \"\u5408\u8a08 $lineCount \u884c\u3092\u51e6\u7406\u3057\u307e\u3057\u305f\\n\";\n} catch (Exception $e) {\n    echo \"\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage() . \"\\n\";\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-151\">\u30e1\u30e2\u30ea\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e0d\u8981\u306a\u5909\u6570\u306e\u89e3\u653e<\/strong>: \u4f7f\u7528\u3057\u7d42\u308f\u3063\u305f\u5927\u304d\u306a\u5909\u6570\u306f <code>unset()<\/code> \u3067\u660e\u793a\u7684\u306b\u89e3\u653e\u3059\u308b<\/li>\n\n\n\n<li><strong>\u53c2\u7167\u6e21\u3057\u306e\u6d3b\u7528<\/strong>: \u5927\u304d\u306a\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u95a2\u6570\u306b\u6e21\u3059\u969b\u306f\u53c2\u7167\u3092\u4f7f\u7528\u3059\u308b<\/li>\n\n\n\n<li><strong>\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u306e\u4f7f\u7528<\/strong>: \u5de8\u5927\u306a\u914d\u5217\u3092\u8fd4\u3059\u4ee3\u308f\u308a\u306b\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u3092\u4f7f\u7528\u3059\u308b<\/li>\n\n\n\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u306e\u30af\u30ed\u30fc\u30ba<\/strong>: \u30d5\u30a1\u30a4\u30eb\u30cf\u30f3\u30c9\u30eb\u306a\u3069\u306e\u30ea\u30bd\u30fc\u30b9\u306f\u4f7f\u7528\u5f8c\u3059\u3050\u306b\u9589\u3058\u308b<\/li>\n\n\n\n<li><strong>\u30ac\u30d9\u30fc\u30b8\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306e\u660e\u793a\u7684\u306a\u5b9f\u884c<\/strong>: \u9577\u6642\u9593\u5b9f\u884c\u3055\u308c\u308b\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u306f <code>gc_collect_cycles()<\/code> \u3092\u5b9a\u671f\u7684\u306b\u547c\u3073\u51fa\u3059<\/li>\n\n\n\n<li><strong>\u30eb\u30fc\u30d7\u5185\u3067\u306e\u4e00\u6642\u5909\u6570\u306e\u518d\u5229\u7528<\/strong>: \u65b0\u3057\u3044\u5909\u6570\u3092\u4f5c\u6210\u305b\u305a\u3001\u65e2\u5b58\u306e\u5909\u6570\u3092\u518d\u5229\u7528\u3059\u308b<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30e1\u30e2\u30ea\u52b9\u7387\u3092\u8003\u616e\u3057\u305f\u30b3\u30fc\u30c9\u4f8b\nfunction analyzeLogFiles($directoryPath) {\n    $stats = [\n        'error_count' =&gt; 0,\n        'warning_count' =&gt; 0,\n        'info_count' =&gt; 0,\n        'files_processed' =&gt; 0\n    ];\n    \n    \/\/ \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\n    $files = glob(\"$directoryPath\/*.log\");\n    \n    foreach ($files as $file) {\n        $stats['files_processed']++;\n        \n        \/\/ \u5404\u30d5\u30a1\u30a4\u30eb\u3092\u884c\u5358\u4f4d\u3067\u51e6\u7406\n        foreach (yieldLinesFromFile($file) as $line) {\n            \/\/ \u6b63\u898f\u8868\u73fe\u3092\u4f7f\u3063\u3066\u30ed\u30b0\u30ec\u30d9\u30eb\u3092\u5224\u5b9a\n            if (preg_match('\/\\b(ERROR|WARNING|INFO)\\b\/', $line, $matches)) {\n                $level = strtolower($matches[1]);\n                $stats[$level . '_count']++;\n            }\n        }\n        \n        \/\/ \u51e6\u7406\u72b6\u6cc1\u3092\u8868\u793a\n        echo \"\u51e6\u7406\u6e08\u307f\u30d5\u30a1\u30a4\u30eb: {$stats['files_processed']} \/ \" . count($files) . \"\\r\";\n        \n        \/\/ \u5b9a\u671f\u7684\u306bGC\u5b9f\u884c\n        if ($stats['files_processed'] % 10 === 0) {\n            gc_collect_cycles();\n        }\n    }\n    \n    return $stats;\n}\n<\/pre>\n\n\n\n<p>PHP\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u306b\u304a\u3044\u3066\u767a\u751f\u3059\u308b\u4e00\u822c\u7684\u306a\u554f\u984c\u306f\u3001\u9069\u5207\u306a\u8a3a\u65ad\u3068\u5bfe\u7b56\u306b\u3088\u308a\u89e3\u6c7a\u53ef\u80fd\u3067\u3059\u3002\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u554f\u984c\u3001\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u554f\u984c\u3001\u30e1\u30e2\u30ea\u5236\u9650\u306e\u554f\u984c\u306f\u3001\u305d\u308c\u305e\u308c\u5177\u4f53\u7684\u306a\u5bfe\u51e6\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u554f\u984c\u306b\u5bfe\u3059\u308b\u7406\u89e3\u3092\u6df1\u3081\u3001\u9069\u5207\u306a\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u624b\u6cd5\u3092\u8eab\u306b\u3064\u3051\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5805\u7262\u306a\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u6a5f\u80fd\u3092\u5b9f\u88c5\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u7279\u306b\u672c\u756a\u74b0\u5883\u3067\u306f\u3001\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3092\u5fb9\u5e95\u3057\u3001\u60f3\u5b9a\u3055\u308c\u308b\u69d8\u3005\u306a\u554f\u984c\u306b\u4e8b\u524d\u306b\u5bfe\u51e6\u3059\u308b\u8a2d\u8a08\u3092\u5fc3\u304c\u3051\u307e\u3057\u3087\u3046\u3002\u307e\u305f\u3001\u5927\u898f\u6a21\u306a\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u3092\u884c\u3046\u969b\u306b\u306f\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u5b9f\u88c5\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-152\">\u307e\u3068\u3081\uff1a\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u30b9\u30ad\u30eb\u306e\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/h2>\n\n\n\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001PHP\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u306b\u95a2\u3059\u308b10\u306e\u5fc5\u9808\u30c6\u30af\u30cb\u30c3\u30af\u3092\u89e3\u8aac\u3057\u3066\u304d\u307e\u3057\u305f\u3002\u57fa\u672c\u7684\u306a\u95a2\u6570\u306e\u4f7f\u3044\u65b9\u304b\u3089\u3001\u69d8\u3005\u306a\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306e\u51e6\u7406\u3001\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u306e\u52b9\u7387\u7684\u306a\u6271\u3044\u65b9\u3001\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u307e\u3067\u3001\u5e45\u5e83\u3044\u30c8\u30d4\u30c3\u30af\u3092\u30ab\u30d0\u30fc\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u3089\u306e\u77e5\u8b58\u306f\u3001\u5b9f\u969b\u306e\u958b\u767a\u73fe\u5834\u3067\u76f4\u9762\u3059\u308b\u69d8\u3005\u306a\u8ab2\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306e\u57fa\u76e4\u3068\u306a\u308a\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u5b66\u3093\u3060\u30c6\u30af\u30cb\u30c3\u30af\u3092\u5b9f\u8df5\u3067\u6d3b\u304b\u3059\u305f\u3081\u306e\u30a2\u30c9\u30d0\u30a4\u30b9\u3068\u3001\u3055\u3089\u306b\u9ad8\u5ea6\u306a\u30b9\u30ad\u30eb\u3092\u8eab\u306b\u3064\u3051\u308b\u305f\u3081\u306e\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-153\">\u5b66\u3093\u3060\u30c6\u30af\u30cb\u30c3\u30af\u3092\u5b9f\u8df5\u3067\u6d3b\u304b\u3059\u305f\u3081\u306e\u30a2\u30c9\u30d0\u30a4\u30b9<\/h3>\n\n\n\n<p>PHP\u306e\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u30b9\u30ad\u30eb\u3092\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\u308b\u305f\u3081\u306e\u30dd\u30a4\u30f3\u30c8\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-154\">10\u306e\u5fc5\u9808\u30c6\u30af\u30cb\u30c3\u30af\u306e\u5b9f\u8df5\u7684\u306a\u5fdc\u7528<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u95a2\u6570\u306e\u4f7f\u3044\u5206\u3051<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u5c0f\u3055\u306a\u30d5\u30a1\u30a4\u30eb\u306f<code>file_get_contents()<\/code>\u3001\u5927\u304d\u306a\u30d5\u30a1\u30a4\u30eb\u306f<code>fopen()\/fread()\/fclose()<\/code>\u3092\u4f7f\u7528\u3059\u308b<\/li>\n\n\n\n<li>\u30d5\u30a1\u30a4\u30eb\u3092\u305d\u306e\u307e\u307e\u51fa\u529b\u3059\u308b\u5834\u5408\u306f<code>readfile()<\/code>\u3092\u9078\u629e\u3059\u308b<\/li>\n\n\n\n<li>\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u5408\u308f\u305b\u3066\u6700\u9069\u306a\u95a2\u6570\u3092\u9078\u629e\u3059\u308b\u7fd2\u6163\u3092\u3064\u3051\u308b<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u69d8\u3005\u306a\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306e\u9069\u5207\u306a\u51e6\u7406<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u306fJSON\u5f62\u5f0f\u3092\u63a1\u7528\u3057\u3001<code>json_decode()<\/code>\u3067\u8aad\u307f\u8fbc\u3080<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u4ea4\u63db\u306b\u306fCSV\u3084XML\u5f62\u5f0f\u3092\u4f7f\u3044\u3001\u5c02\u7528\u306e\u95a2\u6570\u3067\u51e6\u7406\u3059\u308b<\/li>\n\n\n\n<li>\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306b\u5fdc\u3058\u305f\u9069\u5207\u306a\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u88c5\u3059\u308b<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u5927\u5bb9\u91cf\u30d5\u30a1\u30a4\u30eb\u306e\u52b9\u7387\u7684\u306a\u51e6\u7406<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u5e38\u306b\u610f\u8b58\u3057\u3001\u30b9\u30c8\u30ea\u30fc\u30e0\u51e6\u7406\u3084\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u3092\u6d3b\u7528\u3059\u308b<\/li>\n\n\n\n<li>\u51e6\u7406\u306e\u9032\u6357\u72b6\u6cc1\u3092\u8868\u793a\u3057\u3066\u3001\u9577\u6642\u9593\u5b9f\u884c\u3055\u308c\u308b\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u72b6\u614b\u3092\u76e3\u8996\u3059\u308b<\/li>\n\n\n\n<li>\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u306f\u30d0\u30c3\u30c1\u51e6\u7406\u3084\u5206\u5272\u51e6\u7406\u3092\u691c\u8a0e\u3059\u308b<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u5805\u7262\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u30a8\u30e9\u30fc\u3092\u4e8b\u524d\u306b\u60f3\u5b9a\u3057\u3001\u9069\u5207\u306a\u4f8b\u5916\u51e6\u7406\u3092\u5b9f\u88c5\u3059\u308b<\/li>\n\n\n\n<li>\u30e6\u30fc\u30b6\u30fc\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a\u3059\u308b\u4e00\u65b9\u3067\u3001\u6280\u8853\u7684\u306a\u8a73\u7d30\u306f\u30ed\u30b0\u306b\u8a18\u9332\u3059\u308b<\/li>\n\n\n\n<li>\u30ea\u30ab\u30d0\u30ea\u30fc\u6a5f\u80fd\u3092\u5b9f\u88c5\u3057\u3001\u4e00\u6642\u7684\u306a\u30a8\u30e9\u30fc\u304b\u3089\u306e\u5fa9\u5e30\u3092\u53ef\u80fd\u306b\u3059\u308b<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u306b\u57fa\u3065\u304f\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306f\u5e38\u306b\u691c\u8a3c\u3057\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30c8\u30e9\u30d0\u30fc\u30b5\u30eb\u653b\u6483\u3092\u9632\u6b62\u3059\u308b<\/li>\n\n\n\n<li>\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb\u306e\u53b3\u683c\u306a\u691c\u8a3c\u3068\u5b89\u5168\u306a\u4fdd\u5b58\u3092\u5fb9\u5e95\u3059\u308b<\/li>\n\n\n\n<li>\u6a5f\u5bc6\u60c5\u5831\u3092\u542b\u3080\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u9069\u5207\u306a\u30a2\u30af\u30bb\u30b9\u5236\u9650\u3092\u8a2d\u5b9a\u3059\u308b<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-155\">\u30b3\u30fc\u30c9\u306e\u54c1\u8cea\u5411\u4e0a\u3068\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027<\/h4>\n\n\n\n<p>\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u5358\u306b\u6a5f\u80fd\u3092\u5b9f\u88c5\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u30b3\u30fc\u30c9\u306e\u54c1\u8cea\u3068\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u3082\u91cd\u8981\u3067\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u60aa\u3044\u4f8b\uff1a\u5358\u4e00\u306e\u6a5f\u80fd\u304c\u8907\u6570\u306e\u8cac\u4efb\u3092\u6301\u3064\nfunction processUploadedFile($fileInput) {\n    $uploadedFile = $_FILES[$fileInput];\n    \n    if ($uploadedFile['error'] === UPLOAD_ERR_OK) {\n        $fileName = $uploadedFile['name'];\n        $tempPath = $uploadedFile['tmp_name'];\n        $destination = 'uploads\/' . $fileName;\n        \n        if (move_uploaded_file($tempPath, $destination)) {\n            $content = file_get_contents($destination);\n            \/\/ \u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u306e\u30ed\u30b8\u30c3\u30af...\n            echo \"\u30d5\u30a1\u30a4\u30eb\u304c\u51e6\u7406\u3055\u308c\u307e\u3057\u305f\";\n        } else {\n            echo \"\u30d5\u30a1\u30a4\u30eb\u306e\u79fb\u52d5\u306b\u5931\u6557\u3057\u307e\u3057\u305f\";\n        }\n    } else {\n        echo \"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30a8\u30e9\u30fc: \" . $uploadedFile['error'];\n    }\n}\n\n\/\/ \u826f\u3044\u4f8b\uff1a\u5358\u4e00\u8cac\u4efb\u306e\u539f\u5247\u306b\u57fa\u3065\u3044\u305f\u8a2d\u8a08\nclass FileUploadHandler {\n    private $uploadDir;\n    \n    public function __construct($uploadDir) {\n        $this-&gt;uploadDir = rtrim($uploadDir, '\/');\n    }\n    \n    public function handleUpload($fileInput) {\n        try {\n            $uploadInfo = $this-&gt;validateUpload($fileInput);\n            $destination = $this-&gt;moveUploadedFile($uploadInfo);\n            return $destination;\n        } catch (Exception $e) {\n            $this-&gt;logError($e-&gt;getMessage());\n            throw $e;\n        }\n    }\n    \n    private function validateUpload($fileInput) {\n        if (!isset($_FILES[$fileInput])) {\n            throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u5165\u529b\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\");\n        }\n        \n        $file = $_FILES[$fileInput];\n        \n        if ($file['error'] !== UPLOAD_ERR_OK) {\n            throw new Exception(\"\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u30a8\u30e9\u30fc: \" . $this-&gt;getUploadErrorMessage($file['error']));\n        }\n        \n        return $file;\n    }\n    \n    private function moveUploadedFile($fileInfo) {\n        $safeName = $this-&gt;getSafeFileName($fileInfo['name']);\n        $destination = $this-&gt;uploadDir . '\/' . $safeName;\n        \n        if (!move_uploaded_file($fileInfo['tmp_name'], $destination)) {\n            throw new Exception(\"\u30d5\u30a1\u30a4\u30eb\u306e\u79fb\u52d5\u306b\u5931\u6557\u3057\u307e\u3057\u305f\");\n        }\n        \n        return $destination;\n    }\n    \n    \/\/ \u305d\u306e\u4ed6\u306e\u30d8\u30eb\u30d1\u30fc\u30e1\u30bd\u30c3\u30c9...\n}\n\n\/\/ \u4f7f\u7528\u4f8b\ntry {\n    $uploader = new FileUploadHandler('uploads');\n    $filePath = $uploader-&gt;handleUpload('userFile');\n    \n    $processor = new FileProcessor();\n    $result = $processor-&gt;process($filePath);\n    \n    echo \"\u30d5\u30a1\u30a4\u30eb\u304c\u6b63\u5e38\u306b\u51e6\u7406\u3055\u308c\u307e\u3057\u305f\";\n} catch (Exception $e) {\n    echo \"\u30a8\u30e9\u30fc: \" . $e-&gt;getMessage();\n}\n<\/pre>\n\n\n\n<p>\u3053\u306e\u6539\u5584\u4f8b\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u30dd\u30a4\u30f3\u30c8\u304c\u53cd\u6620\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u95a2\u5fc3\u306e\u5206\u96e2<\/strong>: \u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u51e6\u7406\u3068\u30d5\u30a1\u30a4\u30eb\u5185\u5bb9\u306e\u51e6\u7406\u304c\u5206\u96e2\u3055\u308c\u3066\u3044\u308b<\/li>\n\n\n\n<li><strong>\u5358\u4e00\u8cac\u4efb\u306e\u539f\u5247<\/strong>: \u5404\u30e1\u30bd\u30c3\u30c9\u304c\u660e\u78ba\u306a\u4e00\u3064\u306e\u8cac\u4efb\u3092\u6301\u3064<\/li>\n\n\n\n<li><strong>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/strong>: \u4f8b\u5916\u51e6\u7406\u3092\u4f7f\u3063\u305f\u7d71\u4e00\u7684\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/li>\n\n\n\n<li><strong>\u69cb\u6210\u306e\u6ce8\u5165<\/strong>: \u4f9d\u5b58\u95a2\u4fc2\u304c\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3092\u901a\u3058\u3066\u6ce8\u5165\u3055\u308c\u308b<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-156\">\u3088\u308a\u9ad8\u5ea6\u306a\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u30b9\u30ad\u30eb\u3092\u8eab\u306b\u3064\u3051\u308b\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9<\/h3>\n\n\n\n<p>PHP\u306e\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u30b9\u30ad\u30eb\u3092\u3055\u3089\u306b\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306e\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-157\">\u63a8\u5968\u66f8\u7c4d\u3068\u30aa\u30f3\u30e9\u30a4\u30f3\u30ea\u30bd\u30fc\u30b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>PHP\u30de\u30cb\u30e5\u30a2\u30eb<\/strong>: \u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u6700\u3082\u4fe1\u983c\u3067\u304d\u308b\u30ea\u30bd\u30fc\u30b9\u3067\u3059\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u95a2\u6570: https:\/\/www.php.net\/manual\/ja\/book.filesystem.php<\/li>\n\n\n\n<li>\u30b9\u30c8\u30ea\u30fc\u30e0: https:\/\/www.php.net\/manual\/ja\/book.stream.php<\/li>\n\n\n\n<li>SPL\u30d5\u30a1\u30a4\u30eb\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0: https:\/\/www.php.net\/manual\/ja\/book.spl.php<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u66f8\u7c4d<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u300cModern PHP: New Features and Good Practices\u300d\u8457\u8005: Josh Lockhart<\/li>\n\n\n\n<li>\u300cPHP 7 Data Structures and Algorithms\u300d\u8457\u8005: Mizanur Rahman<\/li>\n\n\n\n<li>\u300cPHP Objects, Patterns, and Practice\u300d\u8457\u8005: Matt Zandstra<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30aa\u30f3\u30e9\u30a4\u30f3\u30b3\u30fc\u30b9<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Laracasts: https:\/\/laracasts.com\/ \u2013 PHP\u3068Laravel\u306e\u30d3\u30c7\u30aa\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb<\/li>\n\n\n\n<li>Symfony Cast: https:\/\/symfonycasts.com\/ \u2013 Symfony\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u30e2\u30c0\u30f3\u306aPHP\u624b\u6cd5<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30ea\u30bd\u30fc\u30b9<\/strong>:\n<ul class=\"wp-block-list\">\n<li>PHP-FIG (PHP Framework Interop Group): https:\/\/www.php-fig.org\/<\/li>\n\n\n\n<li>PHP The Right Way: https:\/\/phptherightway.com\/<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-158\">\u5b9f\u8df5\u7684\u306a\u5b66\u7fd2\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/h4>\n\n\n\n<p>\u30b9\u30ad\u30eb\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306e\u5177\u4f53\u7684\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30a2\u30a4\u30c7\u30a2\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d5\u30a1\u30a4\u30eb\u30d9\u30fc\u30b9\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b7\u30b9\u30c6\u30e0<\/strong>: CSV\u3084JSON\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u3063\u305f\u7c21\u5358\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u5b9f\u88c5<\/li>\n\n\n\n<li><strong>\u30ed\u30b0\u5206\u6790\u30c4\u30fc\u30eb<\/strong>: \u30b5\u30fc\u30d0\u30fc\u30ed\u30b0\u3092\u89e3\u6790\u3057\u3066\u7d71\u8a08\u60c5\u5831\u3092\u8868\u793a\u3059\u308b\u30c4\u30fc\u30eb<\/li>\n\n\n\n<li><strong>\u30d5\u30a1\u30a4\u30eb\u540c\u671f\u30b7\u30b9\u30c6\u30e0<\/strong>: \u30ed\u30fc\u30ab\u30eb\u3068\u30ea\u30e2\u30fc\u30c8\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u540c\u671f\u3059\u308b\u30c4\u30fc\u30eb<\/li>\n\n\n\n<li><strong>\u30de\u30fc\u30af\u30c0\u30a6\u30f3\u3092HTML\u306b\u5909\u63db\u3059\u308b\u30c4\u30fc\u30eb<\/strong>: \u30d5\u30a1\u30a4\u30eb\u5909\u63db\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li><strong>CSV\u30c7\u30fc\u30bf\u30a4\u30f3\u30dd\u30fc\u30c8\/\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u30b7\u30b9\u30c6\u30e0<\/strong>: \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u21d4CSV\u306e\u53cc\u65b9\u5411\u5909\u63db\u30c4\u30fc\u30eb<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-159\">\u5b9f\u52d9\u3067\u5dee\u304c\u3064\u304f\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u306e\u30d7\u30ed\u30d5\u30a7\u30c3\u30b7\u30e7\u30ca\u30eb\u6280\u8853<\/h3>\n\n\n\n<p>\u5b9f\u52d9\u30ec\u30d9\u30eb\u3067\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u306e\u30b9\u30ad\u30eb\u3092\u6d3b\u304b\u3059\u305f\u3081\u306e\u9ad8\u5ea6\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-160\">\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u74b0\u5883\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u51e6\u7406<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5206\u6563\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u6d3b\u7528<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u8907\u6570\u30b5\u30fc\u30d0\u30fc\u9593\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u5171\u6709\u3068\u540c\u671f<\/li>\n\n\n\n<li>NFS\u3084GlusterFS\u306a\u3069\u306e\u30b7\u30b9\u30c6\u30e0\u3068PHP\u306e\u9023\u643a<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30af\u30e9\u30a6\u30c9\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u7d71\u5408<\/strong>:\n<ul class=\"wp-block-list\">\n<li>AWS S3\u3001Google Cloud Storage\u3001Azure Blob\u3068\u306e\u9023\u643a<\/li>\n\n\n\n<li>\u30de\u30eb\u30c1\u30af\u30e9\u30a6\u30c9\u74b0\u5883\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u7ba1\u7406\u6226\u7565<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30d5\u30a1\u30a4\u30eb\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u3068\u975e\u540c\u671f\u51e6\u7406<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u3068WebSocket\u9023\u643a<\/li>\n\n\n\n<li>ReactPHP\u3084AMP\u3001Swoole\u306a\u3069\u306e\u975e\u540c\u671f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6d3b\u7528<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-161\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u306e\u9ad8\u5ea6\u306a\u5b9f\u88c5<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u30de\u30eb\u30c1\u30ec\u30a4\u30e4\u30fc\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u8a2d\u8a08<\/li>\n\n\n\n<li>\u5206\u6563\u30ad\u30e3\u30c3\u30b7\u30e5\u30b7\u30b9\u30c6\u30e0\uff08Redis\u3001Memcached\u306a\u3069\uff09\u3068\u306e\u9023\u643a<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u5171\u6709<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u30b5\u30fc\u30d3\u30b9\u9593\u306e\u30d5\u30a1\u30a4\u30eb\u8ee2\u9001\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>API\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u3092\u901a\u3058\u305f\u30d5\u30a1\u30a4\u30eb\u30a2\u30af\u30bb\u30b9\u306e\u7ba1\u7406<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u76e3\u8996\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5206\u6790<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e1\u30c8\u30ea\u30af\u30b9\u53ce\u96c6<\/li>\n\n\n\n<li>\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u306e\u7279\u5b9a\u3068\u6700\u9069\u5316<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u9ad8\u5ea6\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u8eab\u306b\u3064\u3051\u308b\u3053\u3068\u3067\u3001\u5927\u898f\u6a21\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u4f01\u696d\u74b0\u5883\u3067\u3082\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u5e38\u306b\u65b0\u3057\u3044\u6280\u8853\u3084\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u5b66\u3073\u7d9a\u3051\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u5fdc\u7528\u3057\u3066\u3044\u304f\u3053\u3068\u304c\u3001PHP\u306e\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u30b9\u30ad\u30eb\u3092\u78e8\u304f\u6700\u826f\u306e\u65b9\u6cd5\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u7d39\u4ecb\u3057\u305f10\u306e\u5fc5\u9808\u30c6\u30af\u30cb\u30c3\u30af\u306f\u3001PHP\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u306e\u57fa\u76e4\u3068\u306a\u308b\u77e5\u8b58\u3067\u3059\u3002\u3053\u308c\u3089\u3092\u78ba\u5b9f\u306b\u7406\u89e3\u3057\u3001\u5b9f\u8df5\u3059\u308b\u3053\u3068\u304b\u3089\u59cb\u3081\u3001\u5f90\u3005\u306b\u3088\u308a\u9ad8\u5ea6\u306a\u30b9\u30ad\u30eb\u3078\u3068\u9032\u3093\u3067\u3044\u304f\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u3067\u5b89\u5168\u3001\u305d\u3057\u3066\u5805\u7262\u306a\u30d5\u30a1\u30a4\u30eb\u51e6\u7406\u6a5f\u80fd\u3092\u5b9f\u88c5\u3067\u304d\u308b\u30a8\u30f3\u30b8\u30cb\u30a2\u3078\u3068\u6210\u9577\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>PHP\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u306f\u57fa\u672c\u304b\u3064\u91cd\u8981\u306a\u30b9\u30ad\u30eb\u3067\u3059\u3002\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u3001\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30c7\u30fc\u30bf\u306e\u51e6\u7406\u3001\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u5206\u6790\u306a\u3069\u3001\u3042\u3089\u3086\u308b\u5834\u9762\u3067\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u306e\u77e5\u8b58\u304c\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u5358\u306b &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-3781","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-uncategorized","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3781","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3781"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3781\/revisions"}],"predecessor-version":[{"id":3782,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3781\/revisions\/3782"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3781"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3781"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3781"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}