<blockquote id="dip0s"></blockquote>
  • \n

    Laravel Socialite Testing Example<\/h1>\n @if (auth()->check())\n

    User is authenticated.<\/p>\n

    Name: {{ auth()->user()->name }}<\/p>\n

    Email: {{ auth()->user()->email }}<\/p>\n

    Logout<\/a><\/p>\n @else\n

    User is not authenticated.<\/p>\n

    \n Login with Google<\/a>\n <\/p>\n @endif\n<\/body>\n<\/html>\n<\/pre>\n\n\n\n

    將新建立的tests\/Feature\/AuthRoutesTest.php 的內(nèi)容替換為以下內(nèi)容。
    \n<\/p>\n\n

    php artisan serve\n<\/pre>\n\n\n\n

    \n \n \n 測(cè)試如何進(jìn)行\(zhòng)n<\/h2>\n\n

    在測(cè)試重定向路由時(shí),我們測(cè)試Socialite是否重定向到正確的URL並傳遞正確的URL參數(shù)。 <\/p>\n

    在測(cè)試回呼路由時(shí),我們模擬了 Socialite。模擬不是我最喜歡的選擇:在理想的世界中,我們可以將 Socialite 替換為另一個(gè) OAuth2 實(shí)現(xiàn),並且我們的測(cè)試仍然有效。但是,沒有直接的方法來(lái)連接社交名流發(fā)送的授權(quán)授予請(qǐng)求以裝飾存取權(quán)杖。正因?yàn)槿绱耍M是測(cè)試社交名流的最實(shí)用的方法。 <\/p>\n\n

    透過(guò) Mockery 模擬流暢的 API 非常乏味:您必須從最終呼叫開始並向後進(jìn)行。 <\/p>\n\n

    這是我們的回呼端點(diǎn)呼叫的 Socialite 方法。
    \n<\/p>\n\n

    laravel new socialite-tests\n<\/pre>\n\n\n\n

    以下是如何透過(guò) Mockery 來(lái)嘲笑它:
    \n<\/p>\n\n

     ┌ Would you like to install a starter kit? ────────────────────┐\n │ No starter kit                                               │\n └──────────────────────────────────────────────────────────────┘\n\n ┌ Which testing framework do you prefer? ──────────────────────┐\n │ Pest                                                         │\n └──────────────────────────────────────────────────────────────┘\n\n ┌ Which database will your application use? ───────────────────┐\n │ SQLite                                                       │\n └──────────────────────────────────────────────────────────────┘\n\n ┌ Would you like to run the default database migrations? ──────┐\n │ Yes                                                          │\n └──────────────────────────────────────────────────────────────┘\n<\/pre>\n\n\n\n

    最後,我們進(jìn)行了測(cè)試,以確保直接導(dǎo)航到 OAuth 流程之外的回調(diào) URL 會(huì)傳回 400 狀態(tài)碼。我們將對(duì) Socialite::driver('google')->user() 的呼叫包裝在 try\/catch 區(qū)塊內(nèi)的回呼端點(diǎn)中。如果我們沒有將 Socialite 呼叫包裝在 try\/catch 區(qū)塊中,並且有人在瀏覽器中輸入了回調(diào) URL,則端點(diǎn)將引發(fā)帶有 HTTP 500 狀態(tài)碼的異常。如果您的團(tuán)隊(duì)設(shè)定了 500 個(gè)狀態(tài)代碼的監(jiān)控,則可能會(huì)導(dǎo)致某人在半夜收到尋呼。 <\/p>\n\n

    \n \n \n 總結(jié)\n<\/h2>\n\n

    這是一個(gè)最小的集成,還有很多可以實(shí)現(xiàn)的功能。如果我們要實(shí)現(xiàn)與社交提供者的集成,其中使用者的電子郵件可能會(huì)更改,則此實(shí)作將不起作用,因?yàn)樗c電子郵件地址相符。如果用戶可以在我們的應(yīng)用程式中更改他們的電子郵件地址,那麼由於同樣的原因,此實(shí)作也將無(wú)法運(yùn)作。但是,現(xiàn)在您已經(jīng)了解如何測(cè)試 Socialite,您可以為這些場(chǎng)景編寫測(cè)試並修改底層實(shí)現(xiàn),以便它們通過(guò)。 <\/p>\n\n

    在我了解如何建立自己的實(shí)作、如何測(cè)試它以及我應(yīng)該考慮什麼之前,我閱讀了很多有關(guān) Socialite 的部落格文章和論壇貼文。我想對(duì)其中的一些人表示感謝。 <\/p>\n\n

      \n
    • 我如何為 Laravel Socialite 支援的應(yīng)用程式編寫整合測(cè)試,作者:Stefan Zweifel<\/li>\n
    • ServerSideUp 論壇:社群名流最佳實(shí)踐,對(duì)話<\/li>\n
    • Stack Overflow:如何測(cè)試 Laravel Socialite<\/li>\n
    • Stack Exchange:連結(jié)或不連結(jié)社交登入與符合的電子郵件<\/li>\n
    • Stack Exchange:處理關(guān)聯(lián)的社交帳戶和潛在的孤兒<\/li>\n<\/ul>\n\n

      如果您有興趣深入挖掘,請(qǐng)閱讀這些內(nèi)容。另外,如果您對(duì)本文的第 2 部分感興趣,請(qǐng)告訴我,我將深入探討處理多個(gè)社交提供者、處理使用者更改電子郵件地址或處理刷新權(quán)杖。 <\/p>\n\n\n \n\n \n "}

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

      首頁(yè) 後端開發(fā) php教程 在 Laravel 中實(shí)作和測(cè)試社交名流身份驗(yàn)證

      在 Laravel 中實(shí)作和測(cè)試社交名流身份驗(yàn)證

      Jan 03, 2025 am 11:17 AM

      Implementing & testing Socialite authentication in Laravel

      Laravel Socialite 是一個(gè)第一方 Laravel 包,可幫助開發(fā)人員在其應(yīng)用程式中實(shí)現(xiàn) OAuth 和 OAuth2 社交身份驗(yàn)證。它內(nèi)建了對(duì) Facebook、Twitter、Google、LinkedIn、GitHub、GitLab 和 Bitbucket 的支援。社交名流可以透過(guò)社群包支援其他提供者。

      這篇文章將:

      • 解釋社交名流做什麼、不做什麼。
      • 展示如何透過(guò) Socialite 將 Google 驗(yàn)證整合到新的 Laravel 專案中。
      • 展示測(cè)試社交名流的範(fàn)例。

      TLDR:您可以在我的 GitHub 上查看已完成的專案。如果您只想閱讀完整的程式碼,請(qǐng)看一下它。

      Laravel Socialite 做什麼、不做什麼?

      Socialite 是一個(gè)小包,其主要 API 主要由兩個(gè)主要方法組成:

      • Socialite::driver($authProvider)->redirect() 將把使用者重新導(dǎo)向到指定的驗(yàn)證提供者,透過(guò) URL 參數(shù)將任何必要的資訊傳遞給提供者。
      • Socialite::driver($authProvider)->user() 擷取從驗(yàn)證提供者傳回的使用者資料並提供給端點(diǎn)。

      還有針對(duì)設(shè)定範(fàn)圍和可選參數(shù)的附加支援方法。您可以在社交名流文件中閱讀有關(guān)它們的資訊。

      社交名流不會(huì)執(zhí)行以下操作:它將這些功能的實(shí)作留給開發(fā)人員:

      • ? 建立儲(chǔ)存社交驗(yàn)證資料所需的資料庫(kù)表或欄位。
      • ? 建立身份驗(yàn)證過(guò)程中不存在的使用者。
      • ? 在 OAuth 流程成功後對(duì)使用者進(jìn)行身份驗(yàn)證。
      • ? 刷新 OAuth 令牌。

      先決條件:建立 Google Cloud 項(xiàng)目

      我們將建立一個(gè)小型社交項(xiàng)目,允許使用者透過(guò) Google 進(jìn)行身份驗(yàn)證。為此,您必須建立 Google 應(yīng)用程式。

      先建立一個(gè)新的 Google Cloud 項(xiàng)目,然後為該項(xiàng)目配置 OAuth 同意畫面。將使用者類型設(shè)定為外部,然後啟用以下範(fàn)圍:

      • .../auth/userinfo.email
      • .../auth/userinfo.profile

      設(shè)定同意畫面後,透過(guò)造訪 Google Cloud 憑證頁(yè)面建立 OAuth 2.0 用戶端 ID。保留客戶端ID客戶端密鑰:我們稍後將在專案中使用它們。

      使用 Socialite 設(shè)定一個(gè)最小的 Laravel 項(xiàng)目

      建立一個(gè)新的 Laravel 專案:

      laravel new socialite-tests
      

      從安裝程式中選擇以下選項(xiàng):

       ┌ Would you like to install a starter kit? ────────────────────┐
       │ No starter kit                                               │
       └──────────────────────────────────────────────────────────────┘
      
       ┌ Which testing framework do you prefer? ──────────────────────┐
       │ Pest                                                         │
       └──────────────────────────────────────────────────────────────┘
      
       ┌ Which database will your application use? ───────────────────┐
       │ SQLite                                                       │
       └──────────────────────────────────────────────────────────────┘
      
       ┌ Would you like to run the default database migrations? ──────┐
       │ Yes                                                          │
       └──────────────────────────────────────────────────────────────┘
      

      切換到專案目錄並安裝Socialite。

      laravel new socialite-tests
      

      建立新的遷移。

       ┌ Would you like to install a starter kit? ────────────────────┐
       │ No starter kit                                               │
       └──────────────────────────────────────────────────────────────┘
      
       ┌ Which testing framework do you prefer? ──────────────────────┐
       │ Pest                                                         │
       └──────────────────────────────────────────────────────────────┘
      
       ┌ Which database will your application use? ───────────────────┐
       │ SQLite                                                       │
       └──────────────────────────────────────────────────────────────┘
      
       ┌ Would you like to run the default database migrations? ──────┐
       │ Yes                                                          │
       └──────────────────────────────────────────────────────────────┘
      

      將以下程式碼放入database/migrations中新建立的遷移檔案中:

      cd socialite-tests
      composer require laravel/socialite
      

      此遷移新增了當(dāng)使用者成功進(jìn)行身份驗(yàn)證時(shí)由社交名流提供的欄位。在我們的實(shí)作中,為了簡(jiǎn)單起見,我們將這些欄位直接新增到使用者表中。如果您想支援比 Google 更多的供應(yīng)商,您可能需要建立一個(gè)單獨(dú)的表格來(lái)儲(chǔ)存每個(gè)使用者的多個(gè)提供者。

      我們將密碼設(shè)為可為空,因?yàn)槿绻褂谜邇H透過(guò) Google 進(jìn)行身份驗(yàn)證,則永遠(yuǎn)不會(huì)設(shè)定密碼。如果您的應(yīng)用程式允許社交身份驗(yàn)證密碼身份驗(yàn)證,則當(dāng)使用者嘗試透過(guò)密碼登入時(shí),您必須驗(yàn)證密碼不為空或?yàn)榭铡?

      運(yùn)行遷移。

      php artisan make:migration add_socialite_fields_to_users
      

      在 config/services.php 中,將以下程式碼區(qū)塊新增至 services 陣列的末端。您可以在設(shè)定文件中找到有效社交名流服務(wù)名稱的完整清單。

      <?php
      // database/migrations/2024_12_31_075619_add_socialite_fields_to_users.php
      
      use Illuminate\Database\Migrations\Migration;
      use Illuminate\Database\Schema\Blueprint;
      use Illuminate\Support\Facades\Schema;
      
      return new class extends Migration
      {
          /**
           * Run the migrations.
           */
          public function up(): void
          {
              Schema::table('users', function (Blueprint $table) {
                  $table->string('google_id')->default('');
                  $table->string('google_token')->default('');
                  $table->string('google_refresh_token')->default('');
      
                  // If your app allows both password and social logins, you
                  // MUST validate that the password is not blank during login.
                  // If you do not, an attacker could gain access to an account
                  // that uses social login by only knowing the email.
                  $table->string('password')->nullable()->change();
              });
          }
      
          /**
           * Reverse the migrations.
           */
          public function down(): void
          {
              Schema::table('users', function (Blueprint $table) {
                  $table->dropColumn('google_id');
                  $table->dropColumn('google_token');
                  $table->dropColumn('google_refresh_token');
                  $table->string('password')->nullable(false)->change();
              });
          }
      };
      

      使用您在「先決條件」部分中建立的 Google 應(yīng)用程式中的憑證,將以下內(nèi)容新增至 .env。

      php artisan migrate
      

      將routes/web.php的內(nèi)容替換為以下程式碼。

      // config/services.php
      
      'google' => [
          'client_id' => env('GOOGLE_CLIENT_ID'),
          'client_secret' => env('GOOGLE_CLIENT_SECRET'),
          'redirect' => '/auth/google/callback',
      ],
      

      此文件中的新程式碼實(shí)作了以下路由:

      • 重定向到 Google 以使用適當(dāng)?shù)馁Y訊進(jìn)行社交登入。
      • 處理來(lái)自 Google 的回呼。此路由在登入時(shí)建立或更新用戶,然後對(duì)他們進(jìn)行身份驗(yàn)證,並將他們重定向到主頁(yè)。
      • 註銷經(jīng)過(guò)驗(yàn)證的使用者。

      最後,將 resources/views/welcome.php 的內(nèi)容替換為以下標(biāo)記。

      # .env
      
      GOOGLE_CLIENT_ID="your-google-client-id"
      GOOGLE_CLIENT_SECRET="your-google-client-secret"
      

      完成後,我們可以透過(guò)執(zhí)行開發(fā)伺服器來(lái)手動(dòng)測(cè)試應(yīng)用程式。

      <?php
      // routes/web.php
      
      use App\Models\User;
      use Illuminate\Support\Facades\Auth;
      use Illuminate\Support\Facades\Route;
      use Laravel\Socialite\Facades\Socialite;
      use Laravel\Socialite\Two\InvalidStateException;
      use Laravel\Socialite\Two\User as OAuth2User;
      
      Route::get('/', function () {
          return view('welcome');
      });
      
      Route::get('/auth/google/redirect', function () {
          return Socialite::driver('google')->redirect();
      });
      
      Route::get('/auth/google/callback', function () {
          try {
              /** @var OAuth2User $google_user */
              $google_user = Socialite::driver('google')->user();
          } catch (InvalidStateException $exception) {
              abort(400, $exception->getMessage());
          }
      
          $user = User::updateOrCreate([
              'email' => $google_user->email,
          ], [
              'google_id' => $google_user->id,
              'name' => $google_user->name,
              'google_token' => $google_user->token,
              'google_refresh_token' => $google_user->refreshToken,
          ]);
      
          Auth::login($user);
          return redirect('/');
      });
      
      Route::get('/auth/logout', function () {
          Auth::logout();
          return redirect('/');
      });
      

      當(dāng)您點(diǎn)擊使用 Google 登入連結(jié)時(shí),您應(yīng)該完成 OAuth2 流程並被重定向到主頁(yè),您可以在其中查看有關(guān)來(lái)自 Google 的新建立使用者的信息。

      用害蟲測(cè)試社交名流

      我們的手動(dòng)測(cè)試有效,但我們希望透過(guò)自動(dòng)化測(cè)試來(lái)驗(yàn)證我們將來(lái)不會(huì)意外破壞此功能。

      我們可以使用以下命令建立一個(gè)新的測(cè)試檔案。

      <!-- resources/views/welcome.php -->
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Laravel Socialite Testing Example</title>
      </head>
      <body>
          <h1>Laravel Socialite Testing Example</h1>
          @if (auth()->check())
              <p>User is authenticated.</p>
              <p>Name: {{ auth()->user()->name }}</p>
              <p>Email: {{ auth()->user()->email }}</p>
              <p><a href="/auth/logout">Logout</a></p>
          @else
              <p>User is not authenticated.</p>
              <p>
                  <a href="/auth/google/redirect">Login with Google</a>
              </p>
          @endif
      </body>
      </html>
      

      將新建立的tests/Feature/AuthRoutesTest.php 的內(nèi)容替換為以下內(nèi)容。

      php artisan serve
      

      測(cè)試如何進(jìn)行

      在測(cè)試重定向路由時(shí),我們測(cè)試Socialite是否重定向到正確的URL並傳遞正確的URL參數(shù)。

      在測(cè)試回呼路由時(shí),我們模擬了 Socialite。模擬不是我最喜歡的選擇:在理想的世界中,我們可以將 Socialite 替換為另一個(gè) OAuth2 實(shí)現(xiàn),並且我們的測(cè)試仍然有效。但是,沒有直接的方法來(lái)連接社交名流發(fā)送的授權(quán)授予請(qǐng)求以裝飾存取權(quán)杖。正因?yàn)槿绱?,模擬是測(cè)試社交名流的最實(shí)用的方法。

      透過(guò) Mockery 模擬流暢的 API 非常乏味:您必須從最終呼叫開始並向後進(jìn)行。

      這是我們的回呼端點(diǎn)呼叫的 Socialite 方法。

      laravel new socialite-tests
      

      以下是如何透過(guò) Mockery 來(lái)嘲笑它:

       ┌ Would you like to install a starter kit? ────────────────────┐
       │ No starter kit                                               │
       └──────────────────────────────────────────────────────────────┘
      
       ┌ Which testing framework do you prefer? ──────────────────────┐
       │ Pest                                                         │
       └──────────────────────────────────────────────────────────────┘
      
       ┌ Which database will your application use? ───────────────────┐
       │ SQLite                                                       │
       └──────────────────────────────────────────────────────────────┘
      
       ┌ Would you like to run the default database migrations? ──────┐
       │ Yes                                                          │
       └──────────────────────────────────────────────────────────────┘
      

      最後,我們進(jìn)行了測(cè)試,以確保直接導(dǎo)航到 OAuth 流程之外的回調(diào) URL 會(huì)傳回 400 狀態(tài)碼。我們將對(duì) Socialite::driver('google')->user() 的呼叫包裝在 try/catch 區(qū)塊內(nèi)的回呼端點(diǎn)中。如果我們沒有將 Socialite 呼叫包裝在 try/catch 區(qū)塊中,並且有人在瀏覽器中輸入了回調(diào) URL,則端點(diǎn)將引發(fā)帶有 HTTP 500 狀態(tài)碼的異常。如果您的團(tuán)隊(duì)設(shè)定了 500 個(gè)狀態(tài)代碼的監(jiān)控,則可能會(huì)導(dǎo)致某人在半夜收到尋呼。

      總結(jié)

      這是一個(gè)最小的集成,還有很多可以實(shí)現(xiàn)的功能。如果我們要實(shí)現(xiàn)與社交提供者的集成,其中使用者的電子郵件可能會(huì)更改,則此實(shí)作將不起作用,因?yàn)樗c電子郵件地址相符。如果用戶可以在我們的應(yīng)用程式中更改他們的電子郵件地址,那麼由於同樣的原因,此實(shí)作也將無(wú)法運(yùn)作。但是,現(xiàn)在您已經(jīng)了解如何測(cè)試 Socialite,您可以為這些場(chǎng)景編寫測(cè)試並修改底層實(shí)現(xiàn),以便它們通過(guò)。

      在我了解如何建立自己的實(shí)作、如何測(cè)試它以及我應(yīng)該考慮什麼之前,我閱讀了很多有關(guān) Socialite 的部落格文章和論壇貼文。我想對(duì)其中的一些人表示感謝。

      • 我如何為 Laravel Socialite 支援的應(yīng)用程式編寫整合測(cè)試,作者:Stefan Zweifel
      • ServerSideUp 論壇:社群名流最佳實(shí)踐,對(duì)話
      • Stack Overflow:如何測(cè)試 Laravel Socialite
      • Stack Exchange:連結(jié)或不連結(jié)社交登入與符合的電子郵件
      • Stack Exchange:處理關(guān)聯(lián)的社交帳戶和潛在的孤兒

      如果您有興趣深入挖掘,請(qǐng)閱讀這些內(nèi)容。另外,如果您對(duì)本文的第 2 部分感興趣,請(qǐng)告訴我,我將深入探討處理多個(gè)社交提供者、處理使用者更改電子郵件地址或處理刷新權(quán)杖。

      以上是在 Laravel 中實(shí)作和測(cè)試社交名流身份驗(yàn)證的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

      本網(wǎng)站聲明
      本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

      熱AI工具

      Undress AI Tool

      Undress AI Tool

      免費(fèi)脫衣圖片

      Undresser.AI Undress

      Undresser.AI Undress

      人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

      AI Clothes Remover

      AI Clothes Remover

      用於從照片中去除衣服的線上人工智慧工具。

      Clothoff.io

      Clothoff.io

      AI脫衣器

      Video Face Swap

      Video Face Swap

      使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

      熱工具

      記事本++7.3.1

      記事本++7.3.1

      好用且免費(fèi)的程式碼編輯器

      SublimeText3漢化版

      SublimeText3漢化版

      中文版,非常好用

      禪工作室 13.0.1

      禪工作室 13.0.1

      強(qiáng)大的PHP整合開發(fā)環(huán)境

      Dreamweaver CS6

      Dreamweaver CS6

      視覺化網(wǎng)頁(yè)開發(fā)工具

      SublimeText3 Mac版

      SublimeText3 Mac版

      神級(jí)程式碼編輯軟體(SublimeText3)

      如何在PHP中實(shí)施身份驗(yàn)證和授權(quán)? 如何在PHP中實(shí)施身份驗(yàn)證和授權(quán)? Jun 20, 2025 am 01:03 AM

      tosecurelyhandleauthenticationandationallizationInphp,lofterTheSesteps:1.AlwaysHashPasswordSwithPassword_hash()andverifyusingspasspassword_verify(),usepreparedStatatementStopreventsqlineptions,andStoreSeruserDatain usseruserDatain $ _sessiveferterlogin.2.implementrole-2.imaccessccsccccccccccccccccccccccccc.

      如何在PHP中安全地處理文件上傳? 如何在PHP中安全地處理文件上傳? Jun 19, 2025 am 01:05 AM

      要安全處理PHP中的文件上傳,核心在於驗(yàn)證文件類型、重命名文件並限制權(quán)限。 1.使用finfo_file()檢查真實(shí)MIME類型,僅允許特定類型如image/jpeg;2.用uniqid()生成隨機(jī)文件名,存儲(chǔ)至非Web根目錄;3.通過(guò)php.ini和HTML表單限製文件大小,設(shè)置目錄權(quán)限為0755;4.使用ClamAV掃描惡意軟件,增強(qiáng)安全性。這些步驟有效防止安全漏洞,確保文件上傳過(guò)程安全可靠。

      PHP中==(鬆散比較)和===(嚴(yán)格的比較)之間有什麼區(qū)別? PHP中==(鬆散比較)和===(嚴(yán)格的比較)之間有什麼區(qū)別? Jun 19, 2025 am 01:07 AM

      在PHP中,==與===的主要區(qū)別在於類型檢查的嚴(yán)格程度。 ==在比較前會(huì)進(jìn)行類型轉(zhuǎn)換,例如5=="5"返回true,而===要求值和類型都相同才會(huì)返回true,例如5==="5"返回false。使用場(chǎng)景上,===更安全應(yīng)優(yōu)先使用,==僅在需要類型轉(zhuǎn)換時(shí)使用。

      如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? 如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? Jun 19, 2025 pm 05:13 PM

      PHP中使用基本數(shù)學(xué)運(yùn)算的方法如下:1.加法用 號(hào),支持整數(shù)和浮點(diǎn)數(shù),也可用於變量,字符串?dāng)?shù)字會(huì)自動(dòng)轉(zhuǎn)換但不推薦依賴;2.減法用-號(hào),變量同理,類型轉(zhuǎn)換同樣適用;3.乘法用*號(hào),適用於數(shù)字及類似字符串;4.除法用/號(hào),需避免除以零,並註意結(jié)果可能是浮點(diǎn)數(shù);5.取模用%號(hào),可用於判斷奇偶數(shù),處理負(fù)數(shù)時(shí)餘數(shù)符號(hào)與被除數(shù)一致。正確使用這些運(yùn)算符的關(guān)鍵在於確保數(shù)據(jù)類型清晰並處理好邊界情況。

      如何與PHP的NOSQL數(shù)據(jù)庫(kù)(例如MongoDB,Redis)進(jìn)行交互? 如何與PHP的NOSQL數(shù)據(jù)庫(kù)(例如MongoDB,Redis)進(jìn)行交互? Jun 19, 2025 am 01:07 AM

      是的,PHP可以通過(guò)特定擴(kuò)展或庫(kù)與MongoDB和Redis等NoSQL數(shù)據(jù)庫(kù)交互。首先,使用MongoDBPHP驅(qū)動(dòng)(通過(guò)PECL或Composer安裝)創(chuàng)建客戶端實(shí)例並操作數(shù)據(jù)庫(kù)及集合,支持插入、查詢、聚合等操作;其次,使用Predis庫(kù)或phpredis擴(kuò)展連接Redis,執(zhí)行鍵值設(shè)置與獲取,推薦phpredis用於高性能場(chǎng)景,Predis則便於快速部署;兩者均適用於生產(chǎn)環(huán)境且文檔完善。

      我如何了解最新的PHP開發(fā)和最佳實(shí)踐? 我如何了解最新的PHP開發(fā)和最佳實(shí)踐? Jun 23, 2025 am 12:56 AM

      TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

      什麼是PHP,為什麼它用於Web開發(fā)? 什麼是PHP,為什麼它用於Web開發(fā)? Jun 23, 2025 am 12:55 AM

      PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

      如何設(shè)置PHP時(shí)區(qū)? 如何設(shè)置PHP時(shí)區(qū)? Jun 25, 2025 am 01:00 AM

      tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

      See all articles