国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
報酬ラウンド!
JavaScript関數(shù)內(nèi)でPHPコードを使用できますか?
Codeceptionを使用してPHPコードをテストする方法は?
JavaScriptでPHPコードを書き込む方法は?
ホームページ バックエンド開発 PHPチュートリアル PHPでJavaScriptスタイルのテストウォッチャーを書く方法

PHPでJavaScriptスタイルのテストウォッチャーを書く方法

Feb 09, 2025 am 10:58 AM

How to Write JavaScript-Style Test Watchers in PHP

コアポイント

    JavaScriptスタイルのテストオブザーバーをPHPプロジェクトに統(tǒng)合し、ファイル変換の前処理を自動化し、ファイルが変更されたときにユニットテストを再実行し、開発効率を改善します。
  • phpunitなどのツールを使用して自動テストをセットアップし、phpunit-watcherを使用してファイル変更を観察し、開発中の即時のフィードバックとエラーの検出を確保します。
  • PHPプロジェクトに前処理スクリプトを?qū)g裝し、JavaScript Babelと同様の構(gòu)文変換を許可するため、互換性を向上させ、手動エンコードの取り組みを削減します。
  • PHPテスト環(huán)境を構(gòu)成して、テストする前に事前に処理されたファイルを自動的に再構(gòu)築し、正確なコードカバレッジを維持し、テストプロセスを簡素化します。
  • ファイルオブザーバーを使用して高度な構(gòu)成を調(diào)査して、変更されたファイルのみを選択的に再構(gòu)築し、大規(guī)模プロジェクトの多數(shù)のファイルのテストサイクルを大幅に高速化します。
この記事は、Younes Rafieによってレビューされました。 SitePointコンテンツを最高の狀態(tài)にしてくれたすべてのSitePointピアレビューアに感謝します!

最初にコードのテストを書きませんでした。多くの人と同様に、私の「テスト」はコードを書き、ページを更新しています。 「それは正しく見えますか?」それが正しいと思うなら、私は続けます。

実際には、私が行った仕事のほとんどは、他の形式のテストについてあまり気にしない企業(yè)にとってです。長年の経験と、クリス?ハルジェスのような人々からの賢明なアドバイスの後、私はテストの価値を見ました。そして、私はまだ良いテストがどのように見えるかを?qū)Wんでいます。

How to Write JavaScript-Style Test Watchers in PHP 私は最近、バンドルされたテストオブザーバーを含むいくつかのJavaScriptプロジェクトの取り組みを開始しました。

これは、テスト駆動型のnodejs開発に関する素晴らしい高度なビデオチュートリアルです!

JavaScriptの世界では、ソースコードを前処理することは珍しくありません。 JavaScriptの世界では、開発者はサポートされていない構(gòu)文を使用してコードを作成し、多くの場合Babelと呼ばれるツールを使用して、コードを広くサポートされている構(gòu)文に変換します。

変換スクリプトを呼び出すための負(fù)擔(dān)を減らすために、VoilerPlateプロジェクトはファイルの変更を自動的に監(jiān)視するスクリプトを含め始めました。

私が取り組んだプロジェクトは、再実行ユニットテストに対して同様のアプローチを取りました。 JavaScriptファイルを変更すると、ファイルが変換され、ユニットテストが再実行されます。これにより、何かが壊れているかどうかをすぐに確認(rèn)できます。

このチュートリアルのコードはgithubで見つけることができます。 PHP 7.1でテストしました。

プロジェクト設(shè)定

これらのプロジェクトに取り組み始めて以來、phpunitに似たようなもののセットアップを開始しました。実際、PHPunitオブザーバースクリプトをセットアップした最初のプロジェクトは、ファイルを事前に処理するPHPプロジェクトです。

プロジェクトにプリプロセシングスクリプトを追加した後、それはすべて始まった:

composer require pre/short-closures

これらの特定の前処理スクリプトを使用すると、PSR-4の自動ロードされたクラス(Path/to/file.php?Path/to/file.pre)を変更して、提供する機(jī)能にオプトインできます。そこで、私は私のcomposer.jsonファイルに次のものを追加しました:

"autoload": {
    "psr-4": {
        "App\": "src"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\Tests\": "tests"
    }
}

これはcomposer.json

からです

次に、現(xiàn)在のユーザーセッションの詳細(xì)を含む関數(shù)を生成するクラスを追加しました:

namespace App;

use Closure;

class Session
{
    private $user;

    public function __construct(array $user)
    {
        $this->user = $user;
    }

    public function closureWithUser(Closure $closure)
    {
        return () => {
            $closure($this->user);
        };
    }
}

これはsrc/session.pre

に由來します

これが機(jī)能するかどうかを確認(rèn)するには、小さなサンプルスクリプトをセットアップします。

require_once __DIR__ . "/vendor/autoload.php";

$session = new App\Session(["id" => 1]);

$closure = ($user) => {
    print "user: " . $user["id"] . PHP_EOL;
};

$closureWithUser = $session->closureWithUser($closure);
$closureWithUser();
これはexample.pre

に由來します

…そして、非PSR-4クラスで短い閉鎖を使用したいので、ローダーをセットアップする必要があります:

require_once __DIR__ . "/vendor/autoload.php";

Pre\Plugin\process(__DIR__ . "/example.pre");
これはroader.php

に由來します

コードのこのセクションは、小さなポイントを説明することがたくさんあります。セッションクラスには、1つの閉鎖を受け入れ、別の閉鎖を返す閉鎖的な方法があります。呼び出されると、この新しい閉鎖は元の閉鎖を呼び出し、ユーザーセッションアレイをパラメーターとして提供します。

このすべてを?qū)g行するには、端末を入力してください:

php loader.php

サイドノートとして、これらの前処理は非常に美しい効果的なPHP構(gòu)文を生成します。このように見えます:

$closure = function ($user) {
   print "user: " . $user["id"] . PHP_EOL;
};

…および

public function closureWithUser(Closure $closure)
{
   return [$closure = $closure ?? null, "fn" => function () use (&$closure) {
       $closure($this->user);
   }]["fn"];
}

PHPとPREファイルの両方をリポジトリに送信したくない場合があります。これを行うには、app/**/*。php and emply.phpを.gitignoreに追加しました。

テストの設(shè)定

では、これをどのようにテストしますか? Phpunit:

のインストールから始めましょう

composer require --dev phpunit/phpunit
次に、構(gòu)成ファイルを作成する必要があります:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
    backupGlobals="false"
    backupStaticAttributes="false"
    bootstrap="vendor/autoload.php"
    colors="true"
    convertErrorsToExceptions="true"
    convertNoticesToExceptions="true"
    convertWarningsToExceptions="false"
    processIsolation="false"
    stopOnFailure="false"
    syntaxCheck="false"
>
    <testsuites>
        <testsuite>
            <directory suffix="Test.php">tests</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist addUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">src</directory>
        </whitelist>
    </filter>
</phpunit>
これはphpunit.xml

からです

ベンダー/bin/phpunitを?qū)g行すると、機(jī)能します。しかし、私たちはまだテストしていません。やりましょう:

namespace App\Tests;

use App\Session;
use PHPUnit\Framework\TestCase;

class SessionTest extends TestCase
{
    public function testClosureIsDecorated()
    {
        $user = ["id" => 1];
        $session = new Session($user);

        $expected = null;

        $closure = function($user) use (&$expected) {
            $expected = "user: " . $user["id"];
        };

        $closureWithUser = $session
            ->closureWithUser($closure);

        $closureWithUser();

        $this->assertEquals("user: 1", $expected);
    }
}
これは、tests/sessiontest.php

に由來します

ベンダー/bin/phpunitを?qū)g行すると、単一のテストが渡されます。うん!

何が欠けているのですか?

これまでのところ、すべてがうまくいきました。このコードの小さな部分とこのコードのテストを書きました。プリプロセシングがどのように機(jī)能するかを心配する必要さえありません(JavaScriptプロジェクトよりもステップアップ)。

コードカバレッジを確認(rèn)しようとすると問題が始まります。

セッションをテストしたときに、カバレッジが報告されます。シンプルなクラスなので、100%のカバレッジを達(dá)成しました。ただし、別のクラスを追加する場合:
vendor/bin/phpunit --coverage-html coverage

namespace App; class BlackBox { public function get($key) { return $GLOBALS[$key]; } }から來ています

カバレッジをチェックするとどうなりますか?まだ100%。

これは、blackbox.preをロードするテストがないために発生します。つまり、コンパイルされていないことを意味します。したがって、Phpunitが上書きされたPHPファイルを探すと、この前処理可能なファイルが表示されません。

テストする前にすべてのファイルを構(gòu)築します

テストを?qū)g行しようとする前に、すべてのPREファイルを作成する新しいスクリプトを作成しましょう。

composer require pre/short-closures
これは、テスト/bootstrap.php
に由來します

ここでは、3つの関數(shù)を作成します。1つは再帰ファイルイテレータ(パスから)、1つはこのイテレーターを削除し、1つはPREファイルを再コンパイルするためです。

Phpunit.xmlの現(xiàn)在のBootstrapファイルを置き換える必要があります:

"autoload": {
    "psr-4": {
        "App\": "src"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\Tests\": "tests"
    }
}
これはphpunit.xml
からです

さて、テストを?qū)g行するたびに、このスクリプトは最初にすべての事前ファイルをPHPファイルにクリーニングして再構(gòu)築します。カバレッジが正しく報告されており、幸せな旅を続けることができます…
これとは別に...

コードベースは小さいですが、小さい必要はありません。これを?qū)g際のアプリケーションで試してみることができ、テストするたびにファイルを再構(gòu)築する必要があることをすぐに後悔します。

このプロジェクトでは、私が言及したこのプロジェクトでは、101の事前ファイルがあります。私の(できれば迅速な)ユニットテストスイートを?qū)g行するためには、これには多くの前処理が必要です。変更を監(jiān)視し、重要な部分のみを再構(gòu)築する方法が必要です。まず、ファイルオブザーバーをインストールしてみましょう:

次に、テストスクリプトを作成しましょう:

namespace App;

use Closure;

class Session
{
    private $user;

    public function __construct(array $user)
    {
        $this->user = $user;
    }

    public function closureWithUser(Closure $closure)
    {
        return () => {
            $closure($this->user);
        };
    }
}

これは、スクリプト/ウォッチテスト

に由來します
require_once __DIR__ . "/vendor/autoload.php";

$session = new App\Session(["id" => 1]);

$closure = ($user) => {
    print "user: " . $user["id"] . PHP_EOL;
};

$closureWithUser = $session->closureWithUser($closure);
$closureWithUser();
このスクリプトは、Symfony Finderを作成します(SRCとテストフォルダーをスキャンするために使用されます)。一時的な変更ファイルを定義しましたが、これは私たちがしていることに厳密に必要ではありません。次に、無限ループを使用します。 ResourceWatcherには、ファイルが作成、変更、または削除されたかどうかを確認(rèn)するために使用できる方法があります。

新規(guī)、どのファイルが変更されたかを見つけて再構(gòu)築しましょう。

これは、スクリプト/ウォッチテスト

に由來します

require_once __DIR__ . "/vendor/autoload.php";

Pre\Plugin\process(__DIR__ . "/example.pre");
このコードは、Bootstrapファイルで行うことに似ていますが、変更されたファイルにのみ適用されます。また、ファイルが変更されたら、テストを再実行する必要があります。

これは、スクリプト/ウォッチテスト
に由來します

いくつかの環(huán)境変數(shù)を?qū)毪筏皮い蓼埂¥长欷椁螇鋽?shù)を好みに合わせて管理できますが、作曲家スクリプトに追加することをお勧めします。
php loader.php

これはcomposer.json

からです

app_coverはそれほど重要ではありません。スクリプトにコードカバレッジが含まれているかどうかをオブザーバーに伝えるだけです。 APP_REBUILDはより重要な役割を再生します。TESTS/bootstrap.phpファイルがロードされたときにpreファイルが再構(gòu)築されるかどうかを制御します。ファイルが要求されたときにのみ再構(gòu)築されるように、ファイルを変更する必要があります:

$closure = function ($user) {
   print "user: " . $user["id"] . PHP_EOL;
};

これは、テスト/bootstrap.php

に由來します
また、ブートストラップコードを含める前に、この環(huán)境変數(shù)を設(shè)定するためにオブザーバースクリプトを変更する必要があります。オブザーバースクリプト全體が次のようになります:

public function closureWithUser(Closure $closure)
{
   return [$closure = $closure ?? null, "fn" => function () use (&$closure) {
       $closure($this->user);
   }]["fn"];
}
これは、スクリプト/ウォッチテスト

に由來します

今では、事前に処理可能なファイルが変更されるたびにテストを開始し、テストを?qū)g行できるはずです...

How to Write JavaScript-Style Test Watchers in PHP

覚えておくべきいくつかのこと(rawr)。まず、オブザーバースクリプトを?qū)g行するには、chmod xスクリプト/*が必要です。次に、config:{process-timeout:0}(composer.json)を設(shè)定する必要があります。そうしないと、オブザーバーは300秒後に死亡します。

報酬ラウンド!

このテストオブザーバーは、クールな副作用も有効にしました。これは、PHPunitテストでプリプロセッサ/変換を使用する機(jī)能です。テスト/bootstrap.phpにコードを追加した場合:

composer require pre/short-closures

これは、テスト/bootstrap.php

に由來します

…そして、テストファイルでの前処理を有効にします(preの場合、それを.preに変更することを意味します)。次に、テストファイルで同じプリプロセッサの使用を開始できます。

"autoload": {
    "psr-4": {
        "App\": "src"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\Tests\": "tests"
    }
}
これは、テスト/sessiontest.pre

に由來します

結(jié)論

このようなテストオブザーバーを作成しようとする前に、私が非常に多くのプリプロセッサの作業(yè)をしたとは信じられません。これは、他の言語やフレームワークから學(xué)ぶことができることを証明します。これらのJavaScriptプロジェクトに関與していない場合は、各テストを?qū)g行する前にファイルを再構(gòu)築し続ける場合があります。吐き気!

この方法はあなたにとって効果的ですか?非同期HTTPサーバーまたはその他の長期にわたるプロセスに適応できます。コメントであなたの考えを教えてください。

JavaScriptスタイルテストオブザーバーのFAQ(FAQ)

PHPでJavaScriptスタイルのテストオブザーバーをセットアップする方法は? PHPでJavaScriptスタイルのテストオブザーバーをセットアップするには、複數(shù)のステップが含まれます。まず、phpunitとphpunit-watcherをインストールする必要があります。 Phpunitは、コードのテストを作成する方法を提供するPHPのテストフレームワークです。 Phpunit-watcherは、ファイルを保存するときにコードを監(jiān)視し、phpunitテストを?qū)g行するツールです。これらのツールをインストールした後、コードを監(jiān)視してテストを自動的に実行するようにphpunit-watcherを構(gòu)成できます。この設(shè)定を使用すると、コードの変更に関するフィードバックをすぐに取得できます。これにより、エラーをより迅速に発見して修正するのに役立ちます。

PHPでテストオブザーバーを使用することの利點(diǎn)は何ですか?

PHPでテストオブザーバーを使用することには多くの利點(diǎn)があります。コードの変更に関する即時フィードバックを提供します。これにより、エラーをより速く検出および修正するのに役立ちます。また、コードを変更するたびに手動でテストを?qū)g行する必要がないため、時間を節(jié)約できます。さらに、コードのテストを作成することをお勧めします。これにより、コードの品質(zhì)が向上し、維持が容易になります。

JavaScript関數(shù)內(nèi)でPHPコードを使用できますか?

はい、JavaScript関數(shù)內(nèi)でPHPコードを使用できますが、これは推奨されません。 PHPはサーバー側(cè)の言語であり、JavaScriptはクライアント側(cè)の言語です。これは、ページがクライアントに送信される前にPHPコードがサーバーで実行され、ページが受信された後にJavaScriptコードがクライアントで実行されることを意味します。したがって、JavaScript関數(shù)內(nèi)でPHPコードを使用しようとすると、PHPコードはJavaScript関數(shù)の前に実行され、予期しない結(jié)果につながる可能性があります。

Codeceptionを使用してPHPコードをテストする方法は?

Codeceptionは、単體テスト、機(jī)能テスト、および受け入れテストをサポートするPHPのテストフレームワークです。 CodeceptionでPHPコードをテストするには、まずCodeceptionをインストールし、プロジェクト用に構(gòu)成する必要があります。次に、Codeceptionの構(gòu)文を使用してコードのテストを作成し、CodeCeptionのコマンドラインツールを使用してテストを?qū)g行できます。

JavaScriptでPHPコードを書き込む方法は?

技術(shù)的にはJavaScriptでPHPコードを記述できますが、これは推奨されません。 PHPはサーバー側(cè)の言語であり、JavaScriptはクライアント側(cè)の言語です。これは、ページがクライアントに送信される前にPHPコードがサーバーで実行され、ページが受信された後にJavaScriptコードがクライアントで実行されることを意味します。したがって、JavaScriptでPHPコードを記述しようとすると、PHPコードがJavaScriptコードの前に実行され、予期しない結(jié)果につながる可能性があります。代わりに、Ajaxを使用してクライアントからサーバーにデータを送信する方が良いでしょう。

以上がPHPでJavaScriptスタイルのテストウォッチャーを書く方法の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPに認(rèn)証と承認(rèn)を?qū)g裝するにはどうすればよいですか? PHPに認(rèn)証と承認(rèn)を?qū)g裝するにはどうすればよいですか? Jun 20, 2025 am 01:03 AM

tosecurelyhandLeauthenticationAndauthorizationInizationInization、followTheSteps:1.LwayShashPasswordswithPassword_hash()andverifyusingpassword_verify()、usepreparedStatementStatementStatementStatementStatementStain、andstoreUserdatain $ _SessionAfterlogin.2.implementRementRementRementRementRementRementRementRole

PHPでファイルアップロードを安全に処理するにはどうすればよいですか? PHPでファイルアップロードを安全に処理するにはどうすればよいですか? Jun 19, 2025 am 01:05 AM

PHPでファイルアップロードを安全に処理するために、コアはファイルタイプを確認(rèn)し、ファイルの名前を変更し、権限を制限することです。 1。Finfo_File()を使用して実際のMIMEタイプを確認(rèn)し、Image/JPEGなどの特定のタイプのみが許可されます。 2。uniqid()を使用してランダムファイル名を生成し、非webルートディレクトリに保存します。 3. PHP.iniおよびHTMLフォームを介してファイルサイズを制限し、ディレクトリ権限を0755に設(shè)定します。 4. Clamavを使用してマルウェアをスキャンしてセキュリティを強(qiáng)化します。これらの手順は、セキュリティの脆弱性を効果的に防止し、ファイルのアップロードプロセスが安全で信頼性が高いことを確認(rèn)します。

PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? Jun 19, 2025 am 01:07 AM

PHPでは、==と==の主な違いは、タイプチェックの厳格さです。 ==タイプ変換は比較の前に実行されます。たとえば、5 == "5"はtrueを返します。===リクエストは、trueが返される前に値とタイプが同じであることを要求します。たとえば、5 === "5"はfalseを返します。使用シナリオでは、===はより安全で、最初に使用する必要があります。==は、タイプ変換が必要な場合にのみ使用されます。

PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? Jun 19, 2025 pm 05:13 PM

PHPで基本的な數(shù)學(xué)操作を使用する方法は次のとおりです。1。追加標(biāo)識は、整數(shù)と浮動小數(shù)點(diǎn)數(shù)をサポートし、変數(shù)にも使用できます。文字列番號は自動的に変換されますが、依存関係には推奨されません。 2。減算標(biāo)識の使用 - 標(biāo)識、変數(shù)は同じであり、タイプ変換も適用されます。 3.乗算サインは、數(shù)字や類似の文字列に適した標(biāo)識を使用します。 4.分割はゼロで割らないようにする必要がある分割 /標(biāo)識を使用し、結(jié)果は浮動小數(shù)點(diǎn)數(shù)である可能性があることに注意してください。 5.モジュラス標(biāo)識を採取することは、奇妙な數(shù)と偶數(shù)を判斷するために使用でき、負(fù)の數(shù)を処理する場合、殘りの兆候は配當(dāng)と一致しています。これらの演算子を正しく使用するための鍵は、データ型が明確であり、境界の狀況がうまく処理されるようにすることです。

PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? Jun 19, 2025 am 01:07 AM

はい、PHPは、特定の拡張機(jī)能またはライブラリを使用して、MongoDBやRedisなどのNOSQLデータベースと対話できます。まず、MongoDBPHPドライバー(PECLまたはComposerを介してインストール)を使用して、クライアントインスタンスを作成し、データベースとコレクションを操作し、挿入、クエリ、集約、その他の操作をサポートします。第二に、PredisライブラリまたはPhpredis拡張機(jī)能を使用してRedisに接続し、キー価値設(shè)定と取得を?qū)g行し、高性能シナリオにPhpredisを推奨しますが、Predisは迅速な展開に便利です。どちらも生産環(huán)境に適しており、十分に文書化されています。

最新のPHP開発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? 最新のPHP開発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? Jun 23, 2025 am 12:56 AM

postaycurrentwithpdevellyments andbest practices、follow keynewsourceslikephp.netandphpweekly、egagewithcommunitiessonforums andconferences、keeptooling and gradivallyadoptnewfeatures、andreadorcontributeTopensourceprijeprijeprijeptrijeprijeprests.

PHPとは何ですか、そしてなぜそれがWeb開発に使用されるのですか? PHPとは何ですか、そしてなぜそれがWeb開発に使用されるのですか? Jun 23, 2025 am 12:55 AM

PhpBecamepopularforwebdevelopmentduetoitseaseaseaseaseasease、SeamlessintegrationWithhtml、widespreadhostingsupport、andalargeecosystemincludingframeworkelavelandcmsplatformslikewordspresspressinsinsionsisionsisionsisionsisionsionsionsisionsionsionsisionsisions

PHPタイムゾーンを設(shè)定する方法は? PHPタイムゾーンを設(shè)定する方法は? Jun 25, 2025 am 01:00 AM

tosettherighttimezoneInphp、usedate_default_timezone_set()functionthestthestofyourscriptwithavalididentifiersiersuchas'america/new_york'.1.usedate_default_timezone_set()beforeanydate/timefunctions.2.2.Altertentally、confuturethephp.inifilebyset.

See all articles