


Bagaimana untuk membina persekitaran kontena tugas PHP yang bebas. Cara mengkonfigurasi bekas untuk menjalankan skrip masa PHP
Membina persekitaran kontena tugas PHP yang bebas boleh dilaksanakan melalui Docker. Langkah -langkah khusus adalah seperti berikut: 1. Pasang Docker dan Docker dikarang sebagai asas; 2. Buat direktori bebas untuk menyimpan fail Dockerfile dan Crontab; 3. Tulis Dockerfile untuk menentukan persekitaran PHP CLI dan pasangkan kron dan sambungan yang diperlukan; 4. Tulis fail Crontab untuk menentukan tugas masa; 5. Tulis docker-compose.yml untuk memasang direktori skrip dan konfigurasikan pembolehubah persekitaran; 6. Mulakan bekas dan sahkan log. Berbanding dengan melaksanakan tugas masa dalam bekas web, bekas bebas mempunyai kelebihan pengasingan sumber, persekitaran murni, kestabilan yang kuat, dan pengembangan yang mudah. Untuk memastikan log dan penangkapan ralat, anda harus mengalihkan output ke fail log, konfigurasikan log ralat PHP ke output ke aliran ralat standard, gunakan monolog untuk merekodkan log berstruktur, dan tetapkan kod keluar yang munasabah. Perangkap biasa termasuk ketidakkonsistenan zon waktu, pembolehubah persekitaran yang hilang, pelaksanaan tugas serentak, sumber kawalan, gangguan tugas, dan lain -lain. Adalah disyorkan untuk mengoptimumkan dengan menetapkan zon waktu, secara eksplisit lulus pembolehubah, reka bentuk idempotensi tugas, batasan sumber, penangkapan isyarat, dll.
Membina persekitaran kontena tugas PHP yang bebas, terutamanya untuk menjalankan skrip masa, adalah bahagian yang sangat diperlukan untuk menguruskan aplikasi kompleks pada pendapat saya. Ia menyediakan cara yang bersih, terpencil dan cekap untuk mengendalikan tugas latar belakang yang tidak memerlukan tindak balas langsung kepada permintaan HTTP. Ringkasnya, ia adalah untuk melepaskan persekitaran PHP yang menjalankan tugas -tugas masa dari perkhidmatan web anda, supaya mereka masing -masing mempunyai keselamatan yang baik dan tidak ada gangguan antara satu sama lain.

Penyelesaian
Untuk membina persekitaran kontena tugas PHP yang bebas, kami biasanya menggunakan Docker. Ini bukan sahaja menyelesaikan masalah konflik pergantungan, tetapi juga memberikan tugas -tugas yang dijadualkan sebagai kotak pasir yang stabil dan terkawal.
Saya biasanya melakukan ini:

Pertama, pastikan bahawa Docker dan Docker Compose dipasang pada mesin hos anda. Ini adalah asas, tanpa mereka, tiada apa yang boleh dikatakan.
Seterusnya, buat struktur direktori berasingan untuk tugas masa anda. Saya secara peribadi suka meletakkan semua perkhidmatan backend dalam direktori induk, seperti services/cron
, supaya tahapnya jelas. Dalam direktori cron
ini, kami akan meletakkan fail Dockerfile
dan crontab
.

1. Tulis Dockerfile
Dockerfile
ini akan menentukan persekitaran PHP CLI anda. Memilih imej PHP CLI yang ringan adalah permulaan yang baik, seperti php:8.x-cli-alpine
kerana ia adalah saiz kecil dan permulaan yang cepat. Kemudian anda perlu memasang alat cron
, serta mana -mana sambungan skrip PHP anda mungkin perlu (seperti pdo_mysql
, redis
, amqp
, dll.).
# Perkhidmatan/Cron/Dockerfile Dari PHP: 8.2-cli-alpine # Pasang Cron dan biasa digunakan PHP Extension Run APK Tambah-No-cache Cron \ && docker-php-ext-pemasangan pdo_mysql opcache bcmath \ && dock-php-ext-enable Opcache # Opcache juga boleh meningkatkan prestasi dalam mod CLI. Walaupun ia tidak begitu jelas seperti FPM, ia lebih buruk daripada tidak ada# jika anda perlu memasang sambungan tambahan, seperti Redis # Jalankan Pecl Pasang Redis \ # && docker-php-ext-enable redis # Salin fail Crontab tersuai ke dalam Container Copy Crontab/etc/Crotabs/Root # Beri fail Crontab keizinan yang betul dan pastikan perkhidmatan Cron mula dijalankan CHMOD 0644/etc/crotabs/root \ && crontab/etc/crotabs/root \ && sentuh /var/log/cron.log # Jalankan perkhidmatan Cron apabila bekas bermula dan simpan bekas yang berjalan di latar depan supaya Docker memantau log cmd ["crond", "-f", "-l", "/var/log/cron.log"]
2. Tulis fail crontab
Fail ini mentakrifkan tugas masa anda. Perhatikan bahawa jalan harus menjadi jalan di dalam bekas.
# Perkhidmatan/Cron/Crontab # Jalankan skrip pembersihan data setiap hari pada 2 pagi 0 2 * * * php /app/scripts/clean_data.php >> /var/log/cron.log 2> & 1 # Jalankan skrip pemprosesan barisan setiap 5 minit */5 * * * * php /app/scripts/process_queue.php >> /var/log/cron.log 2> & 1
3. Tulis docker-compose.yml
Akhirnya, dalam direktori root projek anda, buat fail docker-compose.yml
untuk mengatur bekas tugas masa ini. Di sini anda perlu memasang direktori di mana skrip PHP anda terletak supaya bekas boleh mengaksesnya.
# docker-compose.yml Versi: '3.8' Perkhidmatan: # ... perkhidmatan lain, seperti perkhidmatan web anda, pangkalan data, dan lain -lain. Cron_worker: Membina: Konteks: ./services/cron # tentukan konteks membina Dockerfile Dockerfile: Dockerfile Jilid: - ./src:/App/Scripts # Gunung direktori skrip php anda ke/aplikasi/skrip di dalam bekas # Sekiranya anda memerlukan log yang berterusan, anda boleh memasang volume # - cron_logs: /var/log/cron.log Mulakan semula: Sentiasa # Pastikan persekitaran dimulakan semula secara automatik selepas container terhempas: # Lulus pembolehubah persekitaran yang diperlukan, seperti maklumat sambungan pangkalan data, dll. DB_HOST: YOUR_DB_HOST Db_name: your_db_name # ... # rangkaian: # - your_app_network # Jika anda mempunyai rangkaian tersuai, pastikan perkhidmatan seperti pangkalan data berada di rangkaian # yang sama: # cron_logs: {} # Tentukan jumlah bernama untuk log berterusan # rangkaian: # your_app_network: #driver: jambatan
4. Mula dan sahkan
Di direktori di mana docker-compose.yml
terletak, dijalankan:
Docker -Compose UP -D -Membina Cron_Worker
Ini akan membina dan memulakan bekas tugas anda. Anda boleh menggunakan docker-compose logs -f cron_worker
untuk melihat log kontena dalam masa nyata, termasuk log pelaksanaan kron dan output skrip.
Mengapa tidak menjalankan tugas berjangka secara langsung di dalam bekas pelayan web?
Ini benar -benar soalan yang baik, dan saya sering ditanya. Sejujurnya, saya juga membuat kemalasan seperti ini pada mulanya, berfikir, "Bukankah ia hanya persekitaran PHP, mengapa mengganggu ini?" Tetapi selepas latihan, saya mendapati bahawa ini adalah keputusan yang buruk, dengan alasan berikut:
Pertama, pengasingan sumber dan kesan prestasi . Tugas teras pelayan web (seperti NGINX PHP-FPM) adalah dengan cepat bertindak balas terhadap permintaan HTTP pengguna. Sekiranya tugas masa anda (terutamanya yang mungkin memakan masa, memakan CPU, atau memakan memori) dan perkhidmatan web diperah ke dalam bekas, apabila tugas-tugas masa berjalan, ia mungkin merampas sumber perkhidmatan web, menyebabkan laman web anda untuk bertindak balas dengan perlahan dan bahkan masa keluar dari permintaan. Ia seperti di dapur di mana seorang chef perlu memasak makanan dengan cepat untuk tetamu dan mencuci banyak pakaian kotor pada masa yang sama, dan kecekapannya pasti akan terjejas.
Kedua, pergantungan dan kesucian alam sekitar . Perkhidmatan web biasanya hanya memerlukan sedikit pelanjutan PHP dan konfigurasi untuk mengendalikan permintaan HTTP. Untuk tugas masa, mereka mungkin memerlukan sambungan yang sama sekali berbeza (seperti sambungan giliran mesej, perpustakaan pelanggan API tertentu) atau konfigurasi PHP yang berbeza (seperti had masa pelaksanaan yang lebih lama). Campurkannya bersama -sama dan imej kontena web anda akan menjadi kembung, yang mengandungi banyak perkara yang perkhidmatan web tidak perlu, menambah saiz imej dan konflik yang berpotensi.
Tambahan pula, kestabilan dan penyelesaian masalah . Sekiranya skrip tugas yang dijadualkan tidak cukup kukuh, atau kemalangan tugas disebabkan oleh masalah data, ia boleh menyebabkan seluruh bekas digantung. Jika perkhidmatan web dan tugas yang dijadualkan bersama -sama, laman web anda juga akan "downline" bersama -sama. Bagi bekas bebas, walaupun kontena tugas yang ditetapkan, perkhidmatan web masih boleh menyediakan perkhidmatan secara normal. Apabila masalah penyelesaian masalah, anda juga boleh lebih jelas mencari sama ada masalah dengan perkhidmatan web atau tugas masa.
Akhirnya, skalabiliti dan pengurusan . Perkhidmatan web biasanya perlu skala mendatar berdasarkan lalu lintas, sementara tugas masa hanya memerlukan satu contoh, atau memerlukan cara penjadualan dan pemantauan yang sama sekali berbeza. Memisahkannya membolehkan anda mengembangkan, mengemas kini dan mengurus secara bebas mengikut keperluan anda, sangat meningkatkan fleksibiliti. Pada pendapat saya, ini adalah mikrokosmos konsep seni bina mikroservis dalam pembangunan harian.
Bagaimana untuk memastikan log pelaksanaan dan penangkapan ralat tugas masa?
Memastikan ketelusan pelaksanaan tugas masa, iaitu, anda boleh tahu bila ia berjalan, sama ada ia berjaya, dan sama ada terdapat sebarang kesilapan. Ini adalah kunci operasi, penyelenggaraan dan debugging. Dalam hal ini, saya mempunyai pengalaman:
1. Output standard dan pengalihan ralat
Ini adalah kaedah yang paling asas dan berkesan. Dalam konfigurasi crontab
anda, pastikan anda mengarahkan output standard skrip (STDOUT) dan ralat standard (STDERR) ke fail log.
* * * * * php /app/scripts/your_script.php >> /var/log/cron.log 2> & 1
Di sini >> /var/log/cron.log
akan menambahkan semua output skrip ke fail /var/log/cron.log
. 2>&1
adalah helah yang menunjukkan ralat standard mengalihkan (deskriptor fail 2) ke mana output standard (deskriptor fail 1) mata. Dengan cara ini, sama ada output biasa skrip atau mesej ralat, ia akan ditulis kepada cron.log
.
Bekas Docker akan menangkap output standard dan kesilapan standard proses crond
, jadi anda dapat melihat log ini melalui docker-compose logs -f cron_worker
.
2. Konfigurasi pelaporan ralat PHP dalam bekas
Pastikan persekitaran PHP dalam bekas dikonfigurasi dengan betul dengan laporan ralat. Dalam Dockerfile
, anda boleh membuat fail php.ini
tersuai dan menyalinnya, atau menetapkannya secara langsung di Dockerfile
.
# Perkhidmatan/Cron/Dockerfile # ... Salin custom-php.ini /usr/local/etc/php/conf.d/custom-php.ini # ...
Kandungan custom-php.ini
:
# custom-php.ini error_reporting = e_all & ~ e_notice & ~ e_deprecated & ~ e_strict display_errors = off log_errors = on error_log = /dev /stderr; output Log ralat PHP ke ralat standard, supaya Docker juga dapat menangkapnya
display_errors = Off
adalah untuk mengelakkan mengeluarkan mesej ralat terus ke persekitaran pengeluaran log, manakala log_errors = On
memastikan bahawa kesilapan dilog masuk. Menetapkan error_log
ke /dev/stderr
adalah amalan yang sangat baik. Ia membolehkan log ralat dalaman PHP dikeluarkan melalui aliran ralat standard kontena, yang memudahkan koleksi sistem log docker bersatu.
3. Pembalakan peringkat permohonan
Untuk tugas masa yang lebih kompleks, saya sangat mengesyorkan menggunakan perpustakaan log profesional dalam skrip PHP, seperti monolog. Ini membolehkan anda merakam maklumat yang lebih terperinci dan berstruktur, termasuk permulaan tugas, akhir, langkah utama, kesilapan logik perniagaan, amaran, dll.
// /p/scripts/process_queue.php <? Php memerlukan 'vendor/autoload.php'; // Katakan anda menggunakan komposer Gunakan monolog \ logger; Gunakan monolog \ handler \ streamhandler; // buat logger $ log = logger baru ('queue_processor'); $ log-> pushHandler (baru StreamHandler ('php: // stdout', logger :: info)); // output ke output standard cuba { $ log-> info ('Tugas pemprosesan petikan bermula'); // ... Logik Perniagaan Anda $ ProcesedCount = 0; // menganggap berapa banyak keping diproses // ... $ log-> info ('tugas pemprosesan giliran selesai', ['procesed_count' => $ procesedcount]); } tangkapan (\ excepe $ e) { $ log-> ralat ('tugas pemprosesan giliran gagal', ['error' => $ e-> getMessage (), 'trace' => $ e-> getTraceasString ()]); Keluar (1); // kembali kod keluar bukan sifar apabila kegagalan}
Dengan cara ini, walaupun log kron hanya merekodkan permulaan dan keluar skrip, anda dapat melihat proses pelaksanaan terperinci dan kesilapan yang berpotensi di dalam skrip dalam docker-compose logs
.
4. Kod Keluar dan Pemantauan
Biarkan skrip PHP anda keluar dengan 0 kod keluar apabila berjaya, dan dengan kod keluar bukan sifar apabila kegagalan. Ini adalah konvensyen sejagat untuk Unix/Linux dan juga asas bagi sistem pemantauan automatik untuk menentukan sama ada tugas itu berjaya. Digabungkan dengan beberapa perkhidmatan pemantauan luaran (seperti HealthChecks.io), anda boleh ping URL selepas tugas itu berjaya dilaksanakan, atau menerima pemberitahuan apabila tugas itu tidak dilaksanakan untuk masa yang lama.
Perangkap biasa dan cadangan pengoptimuman untuk tugas masa kontena
Di jalan menuju tugas masa kontena, saya telah melangkah ke banyak perangkap dan meringkaskan beberapa pengalaman. Berikut adalah beberapa perangkap biasa dan cadangan pengoptimuman yang sepadan:
1. Masalah Zon Masa: Adakah tugas masa berjalan salah?
Ini adalah klise, tetapi ia sangat mudah untuk diabaikan. Anda mungkin telah menetapkan zon waktu yang betul pada tuan rumah, tetapi di dalam bekas, PHP atau crond
boleh menggunakan masa UTC, menyebabkan masa pelaksanaan tugas masa anda tidak sepadan dengan jangkaan.
Cadangan:
- Di
Dockerfile
secara eksplisit menetapkan zon waktu:Dari PHP: 8.2-cli-alpine # ... Env TZ Asia/Shanghai Jalankan ln -snf/usr/share/zoninfo/$ tz/etc/localtime && echo $ tz>/etc/timezone # ...
- Tetapkan
date.timezone
dalamphp.ini
:Date.TimeZone = "Asia/Shanghai"
- Zon Waktu Bersepadu: Pastikan pangkalan data, perkhidmatan web, dan bekas masa anda menggunakan zon waktu yang sama untuk mengelakkan kekeliruan data dan logik.
2. Pembolehubah persekitaran yang hilang: Tidak boleh skrip menyambung ke pangkalan data?
Bekas perkhidmatan web anda boleh mendapatkan pembolehubah persekitaran seperti maklumat sambungan pangkalan data, kekunci API, dan lain-lain. Melalui docker-compose.yml
atau kaedah lain. Walau bagaimanapun, jika bekas tugas masa bebas tidak dikonfigurasikan dengan jelas, ia tidak akan mendapat maklumat ini.
Cadangan:
- Dalam
docker-compose.yml
secara eksplisit lulus pembolehubah persekitaran untuk perkhidmatancron_worker
:Cron_Worker: # ... Persekitaran: Db_host: your_db_host Db_user: your_db_user Db_pass: your_db_pass # ...
- Gunakan Rahsia Docker atau Alat Pengurusan Konfigurasi: Untuk maklumat sensitif, lebih selamat menggunakan rahsia docker atau alat seperti Hashicorp Vault, Rahsia Kubernet untuk mengurus, dan bukannya secara langsung mendedahkannya kepada
docker-compose.yml
.
3. Konvensyen Tugas dan Pelaksanaan Berulang: Punca Akar Kekacauan Data
Sekiranya tugas masa anda dilaksanakan dengan kerap (seperti sekali seminit), dan tugas terakhir belum selesai dan tugas baru dimulakan lagi, ini mungkin membawa kepada ketidakkonsistenan data atau sumber. Pelaksanaan berulang juga boleh dicetuskan terutamanya apabila bekas dimulakan semula atau sistem penjadualan semula.
Cadangan:
Tugas IDempo Design: Pastikan skrip PHP anda adalah idempotent, iaitu, melakukan operasi yang sama beberapa kali, dengan hasil yang sama seperti sekali. Sebagai contoh, apabila mengemas kini status, ia tidak hanya ditetapkan, tetapi periksa status semasa sebelum mengemas kini.
Mekanisme mengunci: Untuk tugas kritikal, mekanisme penguncian diperkenalkan. Ini boleh:
- Kunci Fail: Pada permulaan skrip, cuba buat kunci fail, dan keluar jika sudah ada.
- Kunci pangkalan data: Gunakan kunci baris atau kunci jadual pangkalan data.
- Kunci yang diedarkan: Jika anda menggunakan beberapa contoh, pertimbangkan untuk menggunakan kunci yang diedarkan seperti Redis atau Zookeeper.
- Fungsi
flock
: PHP Built-Inflock
Function boleh digunakan untuk kunci fail.
// Contoh kunci fail mudah $ lockfile = '/tmp/my_cron_job.lock'; $ fp = fopen ($ lockfile, 'c'); jika (! Flock ($ fp, lock_ex | lock_nb)) { // tidak dapat memperoleh kunci, menunjukkan bahawa tugas itu sedang berjalan echo "Tugas sedang berjalan, melangkau pelaksanaan ini. \ N"; fclose ($ fp); keluar (); } // Dapatkan kunci dan laksanakan tugas echo "Tugas mula melaksanakan ... \ n"; tidur (10); // Operasi yang memakan masa simulasi echo "Pelaksanaan tugas selesai. \ N"; Flock ($ fp, lock_un); // Lepaskan kunci fclose ($ fp); unlink ($ lockfile); // padamkan fail kunci
4. Keterbatasan Sumber: Mencegah tugas masa "tidak terkawal"
Tugas masa yang tidak ditulis secara tidak wajar boleh mengambil banyak CPU atau memori, yang mempengaruhi operasi normal perkhidmatan lain pada tuan rumah.
Cadangan:
- Tetapkan had sumber dalam
docker-compose.yml
:Cron_Worker: # ... menyebarkan: Sumber: Had: CPU: '0.5' # Hadkan penggunaan CPU hingga 0.5 memori teras: 256m # hadkan penggunaan memori hingga 256MB Tempahan: CPU: '0.1' # Reserved 0.1 Memori Teras: 64m # Reserved 64MB Memori
Ini secara berkesan dapat menghalang tugas tunggal daripada menyeret seluruh sistem.
5. Shutdown Elegant: Pastikan Integriti Tugas
Apabila bekas dihentikan atau dimulakan semula, jika tugas masa berjalan, ia sepatutnya mempunyai peluang untuk menyelesaikan operasi semasa atau sekurang -kurangnya membersihkannya.
Cadangan:
- Tangkap isyarat: Tangkap isyarat
SIGTERM
dalam skrip PHP untuk membersihkan, seperti menjimatkan kemajuan dan melepaskan sumber. - Docker Compose
stop_grace_period
: Menambahstop_grace_period
boleh memberi bekas lebih banyak masa untuk memproses isyarat penutupan.Cron_Worker: # ... stop_grace_period: 30s # Beri bekas 30 saat untuk ditutup dengan anggun
Ini adalah beberapa masalah yang saya hadapi dan diselesaikan dalam amalan. Walaupun tugas -tugas masa kontena membawa kemudahan, mereka juga memerlukan pertimbangan dan konfigurasi yang teliti untuk benar -benar memberi permainan penuh kepada kelebihan mereka.
Atas ialah kandungan terperinci Bagaimana untuk membina persekitaran kontena tugas PHP yang bebas. Cara mengkonfigurasi bekas untuk menjalankan skrip masa PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT
Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Berita terkini pada 18 September, Huawei Harmonyos6 telah melancarkan pelbagai pusingan versi pratonton untuk pemaju, dan baru -baru ini membuka kelayakan pengalaman kepada beberapa pengguna yang telah mencubanya buat kali pertama. Menurut maklum balas pengguna, nama sistem semasa tidak lagi memaparkan akhiran "seterusnya", dan ia secara rasmi dinamakan semula kepada Harmonyos6.0. Huawei pada mulanya mencadangkan nama HarmonyOsNext untuk kali pertama di Persidangan Pemaju pada bulan Ogos 2023, yang bertujuan untuk menandakan sistem Hongmeng memasuki peringkat pembangunan baru dan menyedari pembangunan diri asli yang sebenar. Kejayaan teras HarmonyOsNext adalah untuk mengadopsi sepenuhnya senibina sistem asas yang dibangunkan secara bebas, sepenuhnya mengeluarkan kernel Linux dan Android AOSP, dan hanya menjalankan aplikasi berdasarkan kernel Harmonyos.

Tosetupavpnonlinux: 1.InstallopenvpnandnetworkManager.2.importan.ovpnfileorconfigureManually.3.usewireguardforfasterconnections.4.connectvianmcliforautomation.ensredentialsandcertificificateRysiganceGrepersyverigroperseria.

Apabila komputer semula terperangkap, tunggu dan perhatikan aktiviti cakera keras untuk mengesahkan sama ada ia berjalan; Kemudian cabut rangkaian untuk mengelakkan gangguan kemas kini, atau masukkan mod selamat untuk menghapuskan konflik perisian; Semak kesilapan cakera melalui CHKDSK, bersihkan cache softwaredistribusi untuk menyelesaikan masalah kemas kini; Sekiranya masih tidak sah, gunakan media pemasangan Windows untuk memulakan pembaikan dan lakukan operasi tetapan semula.

Pertanyaan maklumat_schema.tables untuk mendapatkan saiz pangkalan data MySQL dengan tepat; 2. Tentukan jadual_schema untuk menyemak jumlah bait dan saiz MB pangkalan data tertentu; 3. 4. Hasilnya mengandungi data dan panjang indeks, jangan masukkan fail log, dan pangkalan data tanpa jadual tidak dipaparkan atau dibatalkan; 5. Anda perlu mempunyai kebenaran yang sepadan untuk mengakses maklumat_schema.

Usecurdate () togetTheCurrentdateInmysql; itreturns'yyyy-mm-dd'format, idealfordate-onlyoperations.

Bar penanda buku boleh dipulihkan dengan mengklik menu tiga titik di sudut kanan atas krom dan memilih "penanda buku"> "menunjukkan bar penanda buku"; 2. Gunakan kekunci pintasan Ctrl B (Windows) atau Command Shift B (Mac) untuk menukar paparan dengan cepat; 3. Pastikan bahawa "Bar Bookmark Show" ditetapkan untuk "sentiasa menunjukkan" dalam "penampilan" halaman tetapan; 4. Jika tidak sah, anda boleh menetapkan semula tetapan penyemak imbas anda untuk memulihkan keadaan lalai.

TolimitresultsinMySQL,usetheLIMITclauseattheendofaSELECTstatementtospecifythenumberofrowstoreturn,suchasLIMIT5forthefirstfiverows;addanoffsetlikeLIMIT5,5toskipthefirstfiveandretrievethenextfive,usefulforpagination;alwayscombineLIMITwithORDERBYforcons

LeftjoinreturnsallrowsfromthelefttableandMatchingRowsFromTheRightTable, withNullValuesfornon-matchingcolumns.2.syntax: selectcolumnsfromleft_tabeleftjoinright_tableoncondition.3.seRampleShipsandTheRoSderSandSoRSanderShipSandTheRoSoRderSandSandReRoSoRdoSoRDORSANDSORSANDSORDERSAND
