Mengapa gasket silinder terbakar bila enjin panas (overheat)

Overheating atau kepanasan melampau adalah keadaan dimana enjin mengalami kepanasan yang melebihi dari sepatutnya.Tahap kepanasan enjin adalah dikawal supaya berada pada satu tahap sejuk untuk enjin beroperasi seterusnya.

Jika terjadi overheating meter penunjuk suhu enjin akan berada lebih dari setengah ataupun berterusan bergerak sedikit demi sedikit ke tanda merah pada meter suhu.Prestasi enjin akan terus menurun dan seterusnya menjadi tersangat panas sehingga enjin akan berhenti sendiri.Penunjuk suhu tidak boleh melebihi dari had minima ,jika melebihi had tersebut ia adalah diklasifikasikan sebagai overheating (kepanasan melampau).

Akibat daripada kepanasan tersebut keadaan seperti enjin berbunyi kuat,berbau hangit,asap berkepul dan enjin mati sendiri adalah keadaan akhir selepas overheating berlaku.

Komponen penyejukan enjin

Komponen-komponen yang berkaitan untuk mengawal suhu enjin supaya tidak mengalami kepanasan adalah seperti berikut:-

1)Radiator
2)Water pump
3)Water jacket
4)Kipas radiator
5)Thermostat
6)Enjin blok

Diantara 6 komponen tersebut hanya enjin blok yang berfungsi tetap dalam enjin untuk mengawal suhu sejuk untuk enjin beroperasi. Diatas blok enjin terdapat llubang-lubang kecil yang akan dilitupi dengan air untuk mengawal kesejukan dari dalam bila enjin dihidupkan.

Air yang berada pada lubang-lubang kecil tersebut akan berada kekal sementara silinder gasket berfungsi menyekat air dan minyak hitam  dari memasuki ruang pembakaran .Di sinilah fungsi sebenar gasket silinder yang bertujuan melemahkan kepanasan kepada tahap yang sesuai untuk enjin beroperasi.Akantetapi bagaimanakah gasket silinder ini boleh terbakar sedangkan dilitupi oleh air pada dasarnya?

Mengapa silinder gasket terbakar dan enjin berhenti

Pada satu ketka dimana enjin terlalu panas iaitu melebihi dari had maksima untuk enjin beroperasi silinder akan menjadi panas sedikit demi sedikit dan terus melekat pada blok dan seterusnya melimpahkan sedikit demi sedikit air ke ruang pembakaran .Bila ruang pembakaran dipenuhi air inilah yang akan menyebabkan kereta berhenti terus tanpa boleh dihidupkan.

Perkara perlu dilakukan sebelum enjin jadi terlalu panas

1.Berhentikan kereta
2.Biarkan enjin sejuk kira2 satu jam
3.Buka penutup radiator setelah enjin sejuk
4.Isikan air semula dalam jacket dan radiator
5.Pastikan kipas berpusing setelah enjin panas semula
6.Jumpa mekanik jika enjin terlalu cepat jadi panas-(silinder gasket telah terbakar)

Carakerja pembaikan berdasarkan kerosakan

1.Servis radiator-jika enjin panas ketika berhenti sahaja
2.Tukar thermostat-jika kipas radiator tidak berpusing dan enjin panas sekejap2
3.Tukar hose bocor-jika terdapat mana2 kebocoran air
4.Tukar head gasket sahaja-jika panas yang kadangkala terjadi sahaja
5.Tukar  motor kipas radiator-jika panas berterusan dan kipas berhenti berpusing
6.Tukar water pump jika air pada water jaket susut selalu
6.Top Overhaul adalah carakerja penuh untuk semua dia atas.

Pengawalan awal supaya tidak terjadi overheating

1.Pastikan coolant mencukupi dalam radiator dan water jaket,pastikan air berwarna biru gelap sentiasa
2.Flush radiator atau tukar air radiator setiap kali servis
3.Pastikan tiada hose air yang bocor
4.Pastikan kipas radiator berfungsi
5.Tukar water pump jika air dalam water jacket susut
6.Picit hose di thermostat berulang kali supaya thermostat tidak melekat dengan coolant sahaja
7.Sembur air pada sirip radiator untuk hilangkan habuk ,daun atau batu kecil yang terselit pada sirip radiator
8.Parking kereta pada tempat berbumbung jika ada
9.Semasa mengisi semula air radiator hidupkan enjin seketika supaya air dapat memenuhi semua ruang.
10.Gunakan coolant yang disarankan sahaja

Sumber: MekanikKereta.Blogspot.Com

Workflow Automation At Your Service With Trello’s Butler

Say goodbye to the tedious clicks and endless card drags of yesteryear, and say hello to custom automations, rules, scheduled commands, and so much more! Consider Butler to be the robo-sidekick for your team’s productivity, allowing you to create a seamless process for any task or workflow at the board or card level.

Plus, Butler doesn’t require some fancy degree in coding. Automations are easily created using natural language, so it’s like productivity Mad Libs. Simply go through Butler’s command building window and select what you would like Butler to do, and it will do it all for you without your having to write a line of code. No code, FTW!

Best of all, Butler is available to all Trello users, and Butler for Business Class and Enterprise comes with even more advanced features and automation capabilities. To learn more about the Butler features that come with your Trello account, check out this handy help document.

To add Butler’s powerful automations to your boards simply click the Butler icon in the board menu and begin giving your board butler things to do. Since there are infinite ways to use Butler’s superpowers, we’ve provided a few examples.

Play By The Rules (Trust Us!)

Imagine this: You’ve finished your latest project, you wipe the sweat off your brow, you drag a card to Done, and *instantly* the remaining checklist items are marked complete, the due date is marked complete, and you are removed from the card—all without you having to do a thing.

Setting automatic rules with Butler

Rules will automatically react to actions on your boards like magic and operate across the entire board for all members. Plus, they can be built to handle a lot of complex actions and bring an automated process to your boards.

For instance, if you are on a Sales team and have a contract that needs review by Legal, you can set up a rule so that whenever a card is moved into the “Legal Review” list, your legal review process checklist is added to the card with a due date for 2 days from then, and have it assigned to your team’s lawyer.

Rule

Setting up a rule is as simple as filling in the fields for what you’d like to happen when a specific action or trigger takes place. For instance, in my initial example a trigger would be set for when a card is moved into the “Done” list by anyone on the board. Then establish the actions that would automatically occur when that action is triggered:

  • Mark the due date as complete
  • Check all the items in all the checklists on the card
  • Remove all the members from the card.

Triggers can be set for a variety of actions including:

  • When cards are added, moved, or archived
  • Labels, attachments, members, and votes are added to cards
  • Due dates are added, marked complete, or included in card names
  • Actions are taken on checklists or checklists are added to cards
  • Comments and card description updates
  • When Custom Field data is entered, updated, set, etc.

When a trigger is activated some of the possible actions could be:

  • Moving, archiving, or copying cards
  • Adding or removing labels, attachments, and more
  • Setting, changing, or updating due dates
  • Adding, completing, or resetting checklists
  • Joining, subscribing, and adding/removing members from cards
  • Renaming cards, editing descriptions, adding comments
  • Modifying, adding, or removing Custom Field data
  • Sorting lists by a variety of criteria
  • Interacting with related cards
  • Sending emails (available with Business Class, Enterprise, and Gold)
  • Gets, posts, and puts to URLs (available with Business Class, Enterprise, and Gold)
  • And so much more!

Honestly, it is amazing to simply dig around and see what Butler can do to tackle almost any request you send its way.

Example Use Cases For Rules

  • Get an overview of your team’s work getting done across all of your boards in a single place. For example, set a rule on each of your team boards to make a copy of every card that is moved to a board’s Done list to the team overview board.
  • When a card is created in a “To Do” list, add the “Steps” checklist so that you don’t miss a beat.
  • When someone is added to a card, have Butler automagically set the due date to five working days in the future and post comments like, “I got this.” What a team player!
  • When you enter a card name ending with a date, set the card to be due on that date. Perfect for when emailing cards to your board.
  • When the checklist “Phase 1 Steps” is completed by anyone, move the card to list “Phase 2” and add checklist “Phase 2 Steps.” As they say, process makes perfect.

Building Buttons For A Better Way To Work

Butler also allows you to create custom automations for cards and boards that are executed at the click of a button. Card buttons handle card level tasks, and appear on the card back. Board buttons, on the other hand, appear at the top of your board and accomplish tasks across your entire board.

Trello-Butler-Card-Button2-1

What’s really exciting is that you can create buttons that can perform multiple operations in a single click.

For instance, a card button, when clicked, could move that card to a specific list, add a due date for two days in the future, add a board member, and apply a specified label. Or, a board button could move every card with an overdue due date to a specified list and sort them by label.

Plus, Butler is a team player which means that card and board buttons created by anyone on the board can be used by everyone. This keeps your entire team on the same page when creating a process around actions, whether it’s to notify the next person in a workflow, or prioritize tasks for the week.

Butler-Due-Date-Command

To create custom buttons, start by selecting whether you want to create a card button or a board button and name the button. Then, creating a task is as simple as going through and adding the actions you want to occur and filling in the details, like which list or label.

Create Board Button

Card button actions can include any or all of the following:

  • Moving or archiving a card
  • Adding/removing labels and due dates
  • Marking due dates complete
  • Checking/unchecking checklist items, adding checklists to cards, and resetting checklists
  • Joining, subscribing, and adding/removing members from cards
  • Adding comments, renaming cards, and modifying card descriptions

Board button actions can include:

  • Creating new cards with descriptions in specified lists
  • Creating, archiving, and arranging lists
  • Moving and archiving cards in a list
  • Sorting cards in a list by date, name, votes, custom fields, labels, and time on list

Example Use Cases For Buttons

Card Button

  • Ready to get to work? Create a card button to start a task that moves the card to list “In Progress,” and adds you to the card with a due date.
  • Start each week fresh with a board button to archive the past week’s “Done” list and create a new “Done” list.
  • Add a card button that automatically moves the card to “Done,” marks the due date as complete, and removes you from the card. You can even set up Butler to automatically add a comment that lets your boss know how awesome you are.
  • Never know what to work on next? Add a board button to move a randomly-selected card from the “To Do” list to the “Doing” list. Don’t let analysis paralysis curb your productivity.
  • Let’s say you apply a green label to every bug you fix, so your team knows what’s already shipped. Create a board button to auto-archive all of those cards with a green label and save a lot of precious clicks.
  • Get insight into your infinite backlog by creating a button to sort cards by Custom Field story points, due date, votes, and more so you know what to prioritize next sprint.

Make Time Work For You

If you are rocking a Business Class, Enterprise, or Trello Gold account then you have the ability to setup Butler to work on whatever schedule works for you with scheduled commands based on calendar dates or a card’s due date.

Calendar commands are great for recurring tasks and regular board maintenance like moving and archiving cards, sorting lists, and adding new lists to a board. These commands can be set to run at specific times on daily, weekly, monthly, and yearly times of your choosing.

Butler Calendar Command

For instance, on a weekly sprint board you could set a calendar command to make the start of each week as smooth as possible:

  • Every Monday at 9 AM,
  • Archive all of the cards in the Last Week list
  • Move the cards from the This Week list to the Last Week list
  • Move all of the cards from Up Next to This week and sort them by due date.

If only Butler could also make sure there was a fresh pot of coffee ready for you as well when you stepped into the office. ☕️

Due date commands use a card’s due date as a trigger and can be programmed to take a series of actions as a card’s due date gets closer, the moment is due, or a set period of time after the card is due.

Butler-Due-Date-Command

Setting due date commands is a great way to make sure nothing important falls through the cracks by flagging incomplete cards that are overdue:

  • The moment a card is due
  • Move the card to the top of the list
  • Add the red label to the card
  • Post a comment “@card What’s the status of this?”

Scheduled commands offer a powerful way to keep your boards and cards organized and maintained so that you can spend more time focussing on the finer things in life, like that blog post you were supposed to write last week that Butler totally just reminded you about.

Butler Brings The White Glove Service

Suggestions

If that’s not enough, what makes Butler truly a cut above the rest is that as soon as Butler is enabled on your boards it immediately has ideas to make your life easier. When you open the Butler, click the “Automation Tips” button and Butler will automatically take a quick scan of your board to analyze the most common actions, and suggest them as recommended buttons that can be created in a click. Talk about being prepared for your first day on the job.

So go ahead and bring the power of automation with Butler to your boards today!

Source: Trello.Com

7 Trello Keyboard Shortcuts That Will Make You Swoon

Your Trello game is strong. You’ve mastered some big moves slinging cards across lists like Serena Williams on the court, kicking your to-do list’s butt, and completing due dates at rapid speed.

I imagine you’ve taken things to the next level adding Power-Ups to your boards as fast as Lizzo drops her next hit.

Perhaps, you’ve even cozied up to the easy automation that Butler brings to your workflow.

Luckily, you’re in the right place, because I’m going to show how a touch of fancy finger work can take your productivity to new heights.

What am I talking about? Shortcuts! Trello keyboard shortcuts to be exact.

In fact, Trello is loaded with handy shortcuts that can help you shave time and free your mind to work on more important tasks (like figuring where to order lunch from today).

While everyone’s favorite shortcuts are unique to their personal workflow, I’m going to share my seven favorite keyboard shortcuts that anyone can take away and start using today.

Of course, you can always just hit the question mark key (?) while on a Trello board to bring up the keyboard shortcuts menu. (We’ll consider that tip a freebie 😎)

Insert A Card Anywhere

Let’s start with the basics: You’ve got a brand new board that needs cards or you have new cards you need to add to a board that is already in motion. Simply press the ‘n’ key to add a new card to a list.

how to add a new card to a list in trello

You can also hover your mouse over a card that already exists and press ‘n’ to add a new card right below the hovered card.

✨ Bonus: While not a keyboard shortcut, double-click in between any two cards on a list to add a new card into that position!

Assign Yourself Or Delegate

With all of your new cards on your board, someone needs to own those tasks to start getting things done. If that lucky person is you, simply tap the spacebar while mousing over a card or when the card is open to add yourself to it.

assign yourself to a trello card with the spacebar

Tapping the spacebar on a card that you’ve been added to will remove you from it (should you come to your better judgment).

While picking up your fair share of the work is what makes you a team player, the best leaders delegate, and delegate quickly you shall when you tap the ‘a’ key to reveal the ‘assign members window’ while either a card is open or when hovering over a card.

Stay Organized And On Time With The Due Date Shortcut

Keeping things moving along often requires a deadline, because otherwise, you would just be at the beach letting your cards age, blissfully unaware of the bottlenecks you’ve created.

To hold yourself and your teammates accountable, due dates are a must! (They also really make a board’s calendar look nice.)

Quickly toggle the due date selector while a card is open or when mousing over a card on a list by pressing ‘d’. While you’re there, set up a custom due date reminder to make sure you don’t miss the mark on that deadline.

Of course, with so many cards on your board, you may want to organize them by type or category in a visual way with labels.

Press the ‘l’ key to open the label menu from the card back or while hovering over a card on a list and select the labels you’d like to apply.

But what if you want to move even faster while applying labels?

Here’s a bonus keyboard shortcut for you: Use the number keys 1-9 and 0 to apply labels without having to go through the work to open the menu and select them individually.

Fewer clicks, FTW! Here’s a handy menu to help you out:

Key Label Color
1 Green
2 Yellow
3 Orange
4 Red
5 Purple
6 Blue
7 Sky
8 Lime
9 Pink
0 Black

Alright, here’s one more bonus keyboard shortcut related to labels that I just can’t keep to myself (and won’t count towards the original promise of just seven shortcuts.)

If you name your labels and want to quickly reveal and hide the label names, just press the semicolon key.

Surface The Important Information With Keyboard Shortcuts

Finally, you’ve created all of your cards, assigned tasks to team members, set the due dates, made sure to organize related cards with labels, and now it’s time to get to work.

To quickly remove everyone else from your view press ‘q’ to display only the cards that are assigned to you. Press ‘q’ again to bring everyone else back to the party.

Another way to find what you need is to press ‘f’ to open up the search function in the board’s menu.

Your cursor will automatically be focused in the input field so that you can start searching by term, label, member, or due date. This easy search will help you quickly find what you are looking for across the board.

And there you have it—Seven of my favorite keyboard shortcuts that are sure to boost your Trello productivity.

Of course, I urge everyone to explore the shortcuts menu for themselves and see what works best for you and your workflow. Also, share your favorite Trello tips and tricks on Twitter with the hashtag #trellotips.


Good or bad, we’d love to hear your thoughts. Find us on Twitter (@trello) or write in to support@trello.com.

Source: Trello.Com

Keselamatan Siber: Open Source bukan punca kelemahan keselamatan siber

Keselamatan Siber

BARU-BARU ini, terdapat laporan akhbar yang menyalahkan penggunaan Perisian Sumber Terbuka atau Open Source Software (OSS) sebagai salah satu punca laman web digodam.

Di sini, saya ingin menjelaskan apa sumbangan Perisian Terbuka ini kepada pembangunan teknologi maklumat.

Perisian Sumber Terbuka atau Open Source Software (OSS), adalah hasil daripada satu amalan bersifat sukarela dan gotong royong.

Ia adalah usaha untuk memastikan tiada siapa yang memiliki perisian dengan lesen yang hadkan penggunaan dan kenakan kos yang tidak berpatutan kepada penggunaan.

Ia bertujuan untuk memastikan perisian yang dibangunkan dapat dikongsikan pembangunan dan disebarkan tanpa kerisauan kepada milikan dan juga kos lesen.

Untuk memastikan prinsip ini berterusan dan sah disisi undang-undang, komuniti Sumber Terbuka melalui Open Source Initiative (OSI) iaitu satu organisasi antarabangsa, menyediakan platform untuk menjamin semua perisian sumber terbuka mempunyai lesen yang bersifat terbuka dan boleh diguna pakai oleh pelbagai pihak sama ada individu, organisasi bukan kerajaan, syarikat-syarikat dan kerajaan.

Usaha ini telah berlaku sejak Februari 1998, lebih 20 tahun perlesenan sumber terbuka dan usaha secara komuniti, sukarela dan gotong royong ini dilakukan, malah ia terus semakin kuat dan berterusan dengan sokongan pelbagai pihak dan syarikat yang menerima manfaat yang besar daripada segi kewangan dan juga faedah-faedah lain.

Lebih 20 tahun sejak 1998, perisian sumber terbuka telah menjadi tulang belakang industri ICT dunia seiring dengan keselamatan siber yang mengikuti rapat perisian sumber terbuka.

Terlalu banyak untuk disenaraikan daripada dahulu hingga sekarang pada setiap perisian sumber terbuka yang dibangunkan; daripada compiler C yang menjadi asas pembangunan kepada pelbagai lagi perisian sumber terbuka sehinggalah kepada Kernel Linux yang menjadi asas kepada perisian komputer-komputer dan peralatan rangkaian yang menjalankan internet dan juga perisian Android yang kuasakan telefon bimbit yang kita gunakan.

Kebanyakan syarikat-syarikat besar sekarang ini adalah berasas teknologi yang dibina atas perisian sumber terbuka. Bermula dengan syarikat Red Hat, yang pada awalnya mahu memudahkan pemasangan sistem operasi untuk komputer dan kemudiannya menjadi syarikat ‘Bilion Dolar’ yang kemudian dibeli oleh IBM, gergasi ICT dunia.

Google merupakan penyokong kuat kepada perisian sumber terbuka sejak daripada penubuhannya lagi.

Komputer-komputer yang menyokong infrastuktur Google dalam menjalankan perniagaan enjin carian yang dibina atas perisian sumber terbuka, kini berkembang penggunaan di seluruh dunia.

Google menjadi gergasi industri ICT dengan perisian sumber terbuka, begitu juga dengan Facebook, yang mula dibangunkan dengan perisian sumber terbuka PHP.

PHP adalah bahasa atur cara yang menjalankan Facebook malah ribuan laman-laman web seluruh dunia. Ia sungguh popular hingga sebarang isu keselamatan yang berlaku terasa bagai ia satu kelemahan PHP, sedangkan ia disebabkan oleh ralat yang berlaku kerana pembangunan perisian dengan cara amalan yang tidak selamat dan cekap.

Ia juga disebabkan tiada tindakan segera untuk membetulkan ralat.

Kerajaan Malaysia melalui agensi Unit Pemodenan Tadbiran Dan Perancangan Pengurusan Malaysia (MAMPU) dan juga CyberSecurity Malaysia (CSM) turut menyediakan program latihan khusus untuk pegawai-pegawai ICT dalam kerajaan dalam penggunaan Perisian Sumber Terbuka dan Keselamatan Siber.

Ia menjadi keperluan kepada kerajaan kerana penggunaan luas perisian sumber terbuka dan menangani masalah keselamatan siber dalam pelbagai kemudahan dan perkhidmatan ICT kerajaan Malaysia.

Ia harus dikekal peranan dan berterusan untuk melatih dan melahirkan kakitangan ICT yang setaraf, berkemahiran tinggi dan bekemampuan mengendalikan perisian sumber terbuka dan keselamatan kod serta aplikasi.

Tidak dapat dinafikan ada laman-laman web yang bocor atau ditembusi, namun kita perlu lihat dalam pandangan yang lebih luas, dalam beribu-ribu laman web, dengan ratusan laman-laman web perkhidmatan utama, semuanya dapat dipertahankan dan tiada isu-isu keselamatan.

Sebahagian kecil laman-laman web yang tembus apabila diperiksa semula adalah laman-laman web yang tidak penting atau perkhidmatan dalam peringkat untuk ditamatkan.

Malah ada juga yang sedang dalam usaha pembaikan, hanya keadaan tidak kesempatan pada masanya disebabkan isu isu tertentu.

Tiada mana mana aplikasi sumber terbuka yang 100 peratus bebas dari ancaman siber tetapi harus diingatkan bahawa kesedaran dalam menguruskan aplikasi sumber terbuka ini harus menjadi perkara yang utama iaitu “Update, Patching, Maintenance & Support (UPMS)” kerana ia saling berkait antara satu sama lain.

Ia harus berterusan dan tidak ditinggalkan separuh jalan hanya kerana mungkin disebabkan ramai beranggapan perisian sumber terbuka adalah percuma dan FOC  tetapi tidak bagi servisnya yang perlu disediakan bajet yang sepatutnya.

Kami dalam Industri ICT sama ada individu, swasta dan juga kerajaan, sentiasa berusaha untuk memastikan perkhidmatan ICT dan Internet Malaysia ini sentiasa dalam keadaan selamat dan dikemas kini.

Perisian Sumber Terbuka dan Keselamatan Siber  komuniti-komunitinya adalah satu usaha sukarela. Ia dilakukan dengan bertujuan untuk kebaikan untuk semua.

Tanpanya kita semua tidak akan dapat perkhidmatan yang canggih dan maju seperti sekarang ini.

Harisfazillah Jamel & Mohd Fazli Azran
Komuniti Sumber Terbuka Malaysia & Komuniti Keselamatan Siber

Sumber: AstroAwani

PHP 7.4 Upgrade Notes

PHP 7.4 Upgrade Notes

1. Backward Incompatible Changes
2. New Features
3. Changes in SAPI modules
4. Deprecated Functionality
5. Changed Functions
6. New Functions
7. New Classes and Interfaces
8. Removed Extensions and SAPIs
9. Other Changes to Extensions
10. New Global Constants
11. Changes to INI File Handling
12. Windows Support
13. Migration to pkg-config
14. Other Changes
15. Performance Improvements

========================================
1. Backward Incompatible Changes
========================================

– Core:
. Trying to use values of type null, bool, int, float or resource as an
array (such as $null[“key”]) will now generate a notice. This does not
affect array accesses performed by list().
RFC: https://wiki.php.net/rfc/notice-for-non-valid-array-container
. get_declared_classes() no longer returns anonymous classes that haven’t
been instantiated yet.
. “fn” is now a reserved keyword. In particular it can no longer be used as a
function or class name. It can still be used as a method or class constant
name.
. Passing the result of a (non-reference) list() assignment by reference is
consistently disallowed now. Previously this worked if the right hand side
was a simple (CV) variable and did not occur as part of the list().
. `<?php` at the end of the file (without trailing newline) will now be
interpreted as an opening PHP tag. Previously it was interpreted either as
`<? php` and resulted in a syntax error (with short_open_tag=1) or was
interpreted as a literal `<?php` string (with short_open_tag=0).
. When using include/require on a stream, stream_set_option() will be invoked
with the STREAM_OPTION_READ_BUFFER option. Custom stream wrapper
implementations may need to implement the stream_set_option() method to
avoid a warning (always returning false is a sufficient implementation).

– BCMath:
. BCMath functions will now warn if a non well-formed number is passed, such
as “32foo”. The argument will be interpreted as zero (as before).

– Curl:
. Attempting to serialize a CURLFile class will now generate an exception.
Previously the exception was only thrown on unserialization.
. Using CURLPIPE_HTTP1 is deprecated, and is no longer supported as of cURL
7.62.0.
. The $version parameter of curl_version() is deprecated. If any value not
equal to the default CURLVERSION_NOW is passed, a warning is raised and the
parameter is ignored.

– Date:
. Calling var_dump() or similar on a DateTime(Immutable) instance will no
longer leave behind accessible properties on the object.
. Comparison of DateInterval objects (using ==, < and so on) will now generate
a warning and always return false. Previously all DateInterval objects were
considered equal, unless they had properties.

– Intl:
. The default parameter value of idn_to_ascii() and idn_to_utf8() is now
INTL_IDNA_VARIANT_UTS46 instead of the deprecated INTL_IDNA_VARIANT_2003.

– MySQLi:
. The embedded server functionality has been removed. It was broken since
at least PHP 7.0.
. The undocumented mysqli::$stat property has been removed in favor of
mysqli::stat().

– Openssl:
. The openssl_random_pseudo_bytes() function will now throw an exception in
error situations, similar to random_bytes(). In particular, an Error is
thrown if the number of requested bytes is less than *or equal to* zero,
and an Exception is thrown if sufficient randomness cannot be gathered.
The $crypto_strong output argument is guaranteed to always be true if the
function does not throw, so explicitly checking it is not necessary.
RFC: http://php.net/manual/de/function.openssl-random-pseudo-bytes.php

– PCRE:
. When PREG_UNMATCHED_AS_NULL mode is used, trailing unmatched capturing
groups will now also be set to null (or [null, -1] if offset capture is
enabled). This means that the size of the $matches will always be the same.

– PEAR:
. Installation of PEAR (including PECL) is no longer enabled by default. It
can be explicitly enabled using –with-pear. This option is deprecated and
may be removed in the future.

– PDO:
. Attempting to serialize a PDO or PDOStatement instance will now generate
an Exception rather than a PDOException, consistent with other internal
classes which do not support serialization.

– Reflection:
. Reflection objects will now generate an exception if an attempt is made
to serialize them. Serialization for reflection objects was never
supported and resulted in corrupted reflection objects. It has been
explicitly prohibited now.

– SPL:
. Calling get_object_vars() on an ArrayObject instance will now always return
the properties of the ArrayObject itself (or a subclass). Previously it
returned the values of the wrapped array/object unless the STD_PROP_LIST
flag was specified. Other affected operations are:

* ReflectionObject::getProperties()
* reset(), current(), etc. Use Iterator methods instead.
* Potentially others working on object properties as a list.

(array) casts are *not* affected. They will continue to return either the
wrapped array, or the ArrayObject properties, depending on whether the
STD_PROP_LIST flag is used.
. SplPriorityQueue::setExtractFlags() will throw an exception if zero is
passed. Previously this would generate a recoverable fatal error on the
next extraction operation.
. ArrayObject, ArrayIterator, SplDoublyLinkedList and SplObjectStorage now
support the __serialize() + __unserialize() mechanism in addition to the
Serializable interface. This means that serialization payloads created on
older PHP versions can still be unserialized, but new payloads created by
PHP 7.4 will not be understood by older versions.

– Standard:
. The “o” serialization format has been removed. As it is never produced by
PHP, this may only break unserialization of manually crafted strings.
. Password hashing algorithm identifiers are now nullable strings rather
than integers.

* PASSWORD_DEFAULT was int 1; now is null
* PASSWORD_BCRYPT was int 1; now is string ‘2y’
* PASSWORD_ARGON2I was int 2; now is string ‘argon2i’
* PASSWORD_ARGON2ID was int 3; now is string ‘argon2id’

Applications correctly using the constants PASSWORD_DEFAULT,
PASSWORD_BCRYPT, PASSWORD_ARGON2I, and PASSWORD_ARGON2ID will continue to
function correctly.
. htmlentities() will now throw a notice (instead of a strict standards
warning) if it is used with an encoding for which only basic entity
substitution is supported, in which case it is equivalent to
htmlspecialchars().
. fread() and fwrite() will now return false if the operation failed.
Previously an empty string or 0 was returned. EAGAIN/EWOULDBLOCK are not
considered failures.
. fread() and fwrite() on plain files will now throw a notice on failure,
such as when trying to write to a read-only file resource.

– Tokenizer:
. token_get_all() will now emit a T_BAD_CHARACTER token for unexpected
characters instead of leaving behind holes in the token stream.

========================================
2. New Features
========================================

– Core:
. Added support for typed properties. For example:

class User {
public int $id;
public string $name;
}

This will enforce that $user->id can only be assigned integers and
$user->name can only be assigned strings. For more information see the
RFC: https://wiki.php.net/rfc/typed_properties_v2

. Added support for arrow functions with implicit by-value scope binding.
For example:

$factor = 10;
$nums = array_map(fn($num) => $num * $factor, $nums);

RFC: https://wiki.php.net/rfc/arrow_functions_v2

. Added support for limited return type covariance and argument type
contravariance. The following code will now work:

class A {}
class B extends A {}

class Producer {
public function method(): A {}
}
class ChildProducer extends Producer {
public function method(): B {}
}

Full variance support is only available if autoloading is used. Inside a
single file only non-cyclic type references are possible, because all
classes need to be available before they are referenced.
RFC: https://wiki.php.net/rfc/covariant-returns-and-contravariant-parameters

. Added support for coalesce assign (??=) operator. For example:

$array[‘key’] ??= computeDefault();
// is roughly equivalent to
if (!isset($array[‘key’])) {
$array[‘key’] = computeDefault();
}

RFC: https://wiki.php.net/rfc/null_coalesce_equal_operator

. Added support for unpacking inside arrays. For example:

$arr1 = [3, 4];
$arr2 = [1, 2, …$arr1, 5];
// $arr2 == [1, 2, 3, 4, 5]

RFC: https://wiki.php.net/rfc/spread_operator_for_array

. Added support for underscore separators in numeric literals. Some examples:

6.674_083e-11; // float
299_792_458; // decimal
0xCAFE_F00D; // hexadecimal
0b0101_1111; // binary

RFC: https://wiki.php.net/rfc/numeric_literal_separator

. Support for WeakReferences has been added.
RFC: https://wiki.php.net/rfc/weakrefs

. Throwing exceptions from __toString() is now permitted. Previously this
resulted in a fatal error. Existing recoverable fatals in string conversions
have been converted to Error exceptions.
RFC: https://wiki.php.net/rfc/tostring_exceptions

– CURL:
. CURLFile now supports stream wrappers in addition to plain file names, if
the extension has been built against libcurl >= 7.56.0. The streams may
need to be seekable.

– Filter:
. The FILTER_VALIDATE_FLOAT filter now supports the min_range and max_range
options, with the same semantics as FILTER_VALIDATE_INT.

– FFI:
. A new extension which provides a simple way to call native functions, access
native variables and create/access data structures defined in C libraries.
RFC: https://wiki.php.net/rfc/ffi

– GD:
. Added the “scatter” image filter (IMG_FILTER_SCATTER) to apply a scatter
filter to images. This filter has the following prototype:

imagefilter($im, IMG_FILTER_SCATTER, int $sub, int $plus, array $colors = []);

The $colors array can be populated with a set of indexed colors to
apply the scatter pixel shifting on.

Note, the result of this filter is always random.

– Hash:
. Added “crc32c” hash using Castagnoli’s polynomial. This crc32 variant is
used by storage systems, such as iSCSI, SCTP, Btrfs and ext4.

– Mbstring:
. Added mb_str_split() function, which provides the same functionality as
str_split(), but operating on code points rather than bytes.
RFC: https://wiki.php.net/rfc/mb_str_split

– OPcache:
. Support for preloading code has been added.
RFC: https://wiki.php.net/rfc/preload

– PCRE:
. The preg_replace_callback() and preg_replace_callback_array() functions now
accept an additional $flags argument, with support for the
PREG_OFFSET_CAPTURE and PREG_UNMATCHED_AS_NULL flags. This influences the
format of the matches array passed to to the callback function.

– PDO:
. The username and password can now be specified as part of the PDO DSN for
the mysql, mssql, sybase, dblib, firebird and oci drivers. Previously this
was only supported by the pgsql driver. If a username/password is specified
both in the constructor and the DSN, the constructor takes precedence.

new PDO(“mysql:host=xxx;port=xxx;dbname=xxx;user=xxx;password=xxx”);

– PDO_OCI:
. PDOStatement::getColumnMeta() is now available

– PDO_SQLite:
. PDOStatement::getAttribute(PDO::SQLITE_ATTR_READONLY_STATEMENT) allows
checking whether the statement is read-only, i.e. if it doesn’t modify
the database.
. PDO::setAttribute(PDO::SQLITE_ATTR_EXTENDED_RESULT_CODES, true) enables the
use of SQLite3 extended result codes in errorInfo().

– SQLite3:
. Added SQLite3::lastExtendedErrorCode() to fetch the last extended result
code.
. Added SQLite3::enableExtendedResultCodes($enable = true), which will make
SQLite3::lastErrorCode() return extended result codes.

– Standard:
. strip_tags() now also accepts an array of allowed tags: Instead of
strip_tags($str, ‘<a><p>’) you can now write strip_tags($str, [‘a’, ‘p’]).

. A new mechanism for custom object serialization has been added, which
uses two new magic methods:

// Returns array containing all the necessary state of the object.
public function __serialize(): array;

// Restores the object state from the given data array.
public function __unserialize(array $data): void;

The new serialization mechanism supersedes the Serializable interface,
which will be deprecated in the future.

RFC: https://wiki.php.net/rfc/custom_object_serialization

. array_merge() and array_merge_recursive() may now be called without any
arguments, in which case they will return an empty array. This is useful
in conjunction with the spread operator, e.g. array_merge(…$arrays).

. proc_open() now accepts an array instead of a string for the command. In
this case the process will be opened directly (without going through a
shell) and PHP will take care of any necessary argument escaping.

proc_open([‘php’, ‘-r’, ‘echo “Hello World\n”;’], $descriptors, $pipes);

. proc_open() now supports “redirect” and “null” descriptors. For example:

// Like 2>&1 on the shell
proc_open($cmd, [1 => [‘pipe’, ‘w’], 2 => [‘redirect’, 1]], $pipes);
// Like 2>/dev/null or 2>nul on the shell
proc_open($cmd, [1 => [‘pipe’, ‘w’], 2 => [‘null’]], $pipes);

. password_hash() has argon2i(d) implementations from ext/sodium when PHP is
built without libargon.

RFC: https://wiki.php.net/rfc/sodium.argon.hash

========================================
3. Changes in SAPI modules
========================================

========================================
4. Deprecated Functionality
========================================

– Core:
. Nesting ternary operators without explicit parentheses is deprecated:

// Code like
$a ? $b : $c ? $d : $e
// should be replaced by (current interpretation)
($a ? $b : $c) ? $d : $e
// or (likely intended interpretation)
$a ? $b : ($c ? $d : $e)

RFC: https://wiki.php.net/rfc/ternary_associativity
. The array and string offset access syntax using curly braces is deprecated.
Use $str[$idx] instead of $str{$idx}.
RFC: https://wiki.php.net/rfc/deprecate_curly_braces_array_access
. The (real) cast is deprecated, use (float) instead.
. Unbinding $this of a non-static method through a combination of
ReflectionMethod::getClosure() and closure rebinding is deprecated. Doing
so is equivalent to calling a non-static method statically, which has been
deprecated since PHP 7.0.
. Unbinding $this of a non-static closure is deprecated.
. Using “parent” inside a class without a parent is deprecated, and will throw
a compile-time error in the future. Currently an error will only be
generated if/when the parent is accessed at run-time.
. The allow_url_include ini directive is deprecated. Enabling it will generate
a deprecation notice at startup.

– COM:
. Importing type libraries with case-insensitive constant registering has been
deprecated.

– Filter:
. FILTER_SANITIZE_MAGIC_QUOTES is deprecated, use FILTER_SANITIZE_ADD_SLASHES
instead.

– Mbstring:
. Passing a non-string pattern to mb_ereg_replace() is deprecated. Currently
non-string patterns are interpreted as ASCII codepoints. In PHP 8 the
pattern will be interpreted as a string instead.
. Passing the encoding as 3rd parameter to mb_strrpos() is deprecated. Instead
pass a 0 offset and encoding as 4th parameter.

– LDAP:
. ldap_control_paged_result_response and ldap_control_paged_result are
deprecated. Pagination controls can be sent along with ldap_search instead.

– Reflection:
. Calls to ReflectionType::__toString() now generate a deprecation notice.
This method has been deprecated in favor of ReflectionNamedType::getName()
in the documentation since PHP 7.1, but did not throw a deprecation notice
for technical reasons.
. The export() methods on all Reflection classes are deprecated. Construct a
Reflection object and convert it to string instead:

// ReflectionClass::export(Foo::class, false) is:
echo new ReflectionClass(Foo::class), “\n”;
// $str = ReflectionClass::export(Foo::class, true) is:
$str = (string) new ReflectionClass(Foo::class);

– Standard:
. Passing invalid characters to ”base_convert()”, ”bindec()”, ”octdec()”
and ”hexdec()” will now generate a deprecation notice. The result will
still be computed as if the invalid characters did not exist. Leading and
trailing whitespace, as well as prefixes of type 0x (depending on base)
continue to be allowed.
. Using array_key_exists() on objects is deprecated. Instead either isset()
or property_exists() should be used.
. The is_real() function is deprecated, use is_float() instead.
. The get_magic_quotes_gpc() and get_magic_quotes_runtime() functions are
deprecated. They always return false.
. The hebrevc() function is deprecated. It can be replaced with
nl2br(hebrev($str)), or preferably the use of Unicode RTL support.
. The convert_cyr_string() function is deprecated. It can be replaced by one
of mb_convert_string(), iconv() or UConverter.
. The money_format() function is deprecated. It can be replaced by the
intl NumberFormatter functionality.
. The ezmlm_hash() function is deprecated.
. The restore_include_path() function is deprecated. It can be replaced by
ini_restore(‘include_path’).
. Passing parameters to implode() in reverse order is deprecated, use
implode($glue, $parts) instead of implode($parts, $glue).

========================================
5. Changed Functions
========================================

– SPL:
. SplFileObject::fputcsv(), ::fgetcsv() and ::setCsvControl() now accept an
empty string as $escape argument, which disables the proprietary PHP
escaping mechanism. SplFileObject::getCsvControl() now may also return an
empty string for the third array element, accordingly.

– Standard:
. fputcsv() and fgetcsv() now accept an empty string as $escape argument,
which disables the proprietary PHP escaping mechanism. The behavior of
str_getcsv() has been adjusted accordingly (formerly, an empty string was
identical to using the default).
. proc_open() on Windows can be passed a “create_process_group” option. It
is required, if the child process is supposed to handle CTRL events.
. password_hash() now accepts nullable string and int as $algo argument.
. password_needs_rehash() now accepts nullable string and int as $algo
argument.

========================================
6. New Functions
========================================

– Core:
. Added get_mangled_object_vars($object) function, which returns the mangled
object properties. It returns the same result as (array) $object, with the
exception that it ignores overloaded array casts, such as used by
ArrayObject.

– GD:
. Added imagecreatefromtga() function, which allows reading images in TGA
format. TGA support is now also indicated by gd_info() and imagetypes().
Note that TGA images are not recognized by imagecreatefromstring() and
getimagesize().

– OpenSSL:
. Added openssl_x509_verify(mixed cert, mixed key) function that verifies the
signature of the certificate using a public key. A wrapper around the
OpenSSL’s X509_verify() function.
See <https://github.com/php/php-src/pull/3624>.

– Pcntl:
. Added bool pcntl_unshare(int flags) function which allows dissociating
parts of the process execution context which are currently being shared with
other processes. Explicitly, it allows you to unshare the mount, IPC, UTS,
network, PID, user and cgroup namespaces.

– SQLite3:
. Added SQLite3Stmt::getSQL() to retrieve the SQL of the statement. If true is
passed as $expanded argument, query parameters will be replaced in the
return value by their currently bound value, if libsqlite ≥ 3.14 is used.
. Added SQLite3::backup() to create database backups via the SQLite3 online
backup API.

– Standard
. bool sapi_windows_set_ctrl_handler(callable handler, [, bool add = true]) –
set or remove a handler function upon receiving a CTRL event. The handler
function is expected to have this signature: “function handler(int $event)”.
. bool sapi_windows_generate_ctrl_event(int type, int pid) – send a CTRL event
to another process.
. array password_algos() – return a complete list of all registered password
hashing algorithms. For more details see the RFC:
https://wiki.php.net/rfc/password_registry

========================================
7. New Classes and Interfaces
========================================

– Reflection:
. A new ReflectionReference class has been added, which allows detecting
references and comparing them for identity. For more details see the RFC:
https://wiki.php.net/rfc/reference_reflection

========================================
8. Removed Extensions and SAPIs
========================================

– Interbase:
. The interbase extension has been moved to PECL. Access to an InterBase
and/or FireBird based database is still available with the PDO_Firebird
extension. For more details see the RFC:
https://wiki.php.net/rfc/deprecate-and-remove-ext-interbase

– Recode:
. The recode extension has been moved to PECL. For character set/encoding
conversion the iconv or mbstring extensions could be used instead.
RFC: https://wiki.php.net/rfc/unbundle_recode

– WDDX:
. The WDDX extension has been deprecated and moved to PECL.
RFC: https://wiki.php.net/rfc/deprecate-and-remove-ext-wddx

========================================
9. Other Changes to Extensions
========================================

– GD:
. The behavior of imagecropauto() in the bundled libgd has been synced with
that of system libgd:
* IMG_CROP_DEFAULT is no longer falling back to IMG_CROP_SIDES
* Threshold-cropping now uses the algorithm of system libgd
. The default $mode parameter of imagecropauto() has been changed to
IMG_CROP_DEFAULT; passing -1 is now deprecated.
. imagescale() now supports aspect ratio preserving scaling to a fixed height
by passing -1 as $new_width.

– Filter:
. The filter extension no longer exposes –with-pcre-dir for Unix builds and
can now reliably be built as shared when using ./configure once more.

– Hash:
. The hash extension cannot be disabled anymore and is always an integral part
of any PHP build, similar to the date extension.

– Intl:
. The Intl extension now requires at least ICU 50.1.
. ResourceBundle now implements Countable.

– Libxml:
. All libxml based extensions now require libxml 2.7.6 or newer.

– Mbstring:
. The oniguruma library is no longer bundled with PHP, instead libonig needs
to be available on the system. Alternatively –disable-mbregex can be used
to disable the mbregex component.

– OPcache:
. The –disable-opcache-file|–enable-opcache-file configure options have been
removed in favor of the opcache.file_cache INI directive.

– PDO:
. It is now possible to escape question marks in SQL queries to avoid them
being interpreted as parameter placeholders. Writing “??” allows sending
a single question mark to the database and e.g. use the PostgreSQL JSON key
exists “?” operator. For more details see the RFC:
https://wiki.php.net/rfc/pdo_escape_placeholders

– Reflection:
. Numeric value of class, property, function and constant modifiers was
changed. Don’t filter methods and properties through
ReflectionClass::getMethods() and ReflectionClass::getProperties(), or test
results of Reflection…::getModifiers(), using hard-coded numeric values.
Use corresponding constants instead (e.g. ReflectionMethod::IS_PUBLIC).

– SimpleXML:
. SimpleXMLElement now implements Countable.

– SQLite3:
. The bundled libsqlite has been removed. To build the SQLite3 extension a
system libsqlite3 ≥ 3.7.4 is now required. To build the PDO_SQLite extension
a system libsqlite3 ≥ 3.5.0 is now required.
. (Un)serialization of SQLite3, SQLite3Stmt and SQLite3Result is now
explicitly forbidden. Formerly, serialization of instances of these classes
was possible, but unserialization yielded unusable objects.
. The @param notation can now also be used to denote SQL query parameters.

– Zip:
. The bundled libzip library has been removed. A system libzip >= 0.11 is now
necessary to build the extension.

========================================
10. New Global Constants
========================================

– Mbstring:
. MB_ONIGURUMA_VERSION specifies the version of the oniguruma library against
which mbregex has been built.

– Socket:
. Added FreeBSD-specific socket options:
. SO_LABEL
. SO_PEERLABEL
. SO_LISTENQLIMIT
. SO_LISTENQLEN
. SO_USER_COOKIE

– Standard:
. PHP_WINDOWS_EVENT_CTRL_C
. PHP_WINDOWS_EVENT_CTRL_BREAK

– Tidy:
. TIDY_TAG_ARTICLE
. TIDY_TAG_ASIDE
. TIDY_TAG_AUDIO
. TIDY_TAG_BDI
. TIDY_TAG_CANVAS
. TIDY_TAG_COMMAND
. TIDY_TAG_DATALIST
. TIDY_TAG_DETAILS
. TIDY_TAG_DIALOG
. TIDY_TAG_FIGCAPTION
. TIDY_TAG_FIGURE
. TIDY_TAG_FOOTER
. TIDY_TAG_HEADER
. TIDY_TAG_HGROUP
. TIDY_TAG_MAIN
. TIDY_TAG_MARK
. TIDY_TAG_MENUITEM
. TIDY_TAG_METER
. TIDY_TAG_NAV
. TIDY_TAG_OUTPUT
. TIDY_TAG_PROGRESS
. TIDY_TAG_SECTION
. TIDY_TAG_SOURCE
. TIDY_TAG_SUMMARY
. TIDY_TAG_TEMPLATE
. TIDY_TAG_TIME
. TIDY_TAG_TRACK
. TIDY_TAG_VIDEO

========================================
11. Changes to INI File Handling
========================================

– zend.exception_ignore_args
. New INI directive to include or exclude arguments from stack traces
generated for exceptions.

========================================
12. Windows Support
========================================

– stat:
. The stat implementation has been refactored.
– An inode number is delivered and is based on the NTFS file index.
– The device number is now based on the volume serial number.

Note that both values are derived from the system and provided as is on 64-bit
systems. On 32-bit systems, these values might overflow the 32-bit integer in
PHP, so they’re fake.

– CTRL+C and CTRL+BREAK on console can be caught by setting a handler function
with sapi_windows_set_ctrl_handler().

– configure now regards additional CFLAGS and LDFLAGS set as environment
variables.

– OPcache now supports an arbitrary amount of separate caches per user via the
the INI directive opcache.cache_id. All processes with the same cache ID and
user share an OPcache instance.

========================================
13. Migration to pkg-config
========================================

A number of extensions have been migrated to exclusively use pkg-config for the
detection of library dependencies. Generally, this means that instead of using
–with-foo-dir=DIR or similar only –with-foo is used. Custom library paths can
be specified either by adding additional directories to PKG_CONFIG_PATH or by
explicitly specifying compilation options through FOO_CFLAGS and FOO_LIBS.

The following extensions and SAPIs are affected:

– Curl:
. –with-curl no longer accepts a directory.

– Enchant:
. –with-enchant no longer accepts a directory.

– FPM:
. –with-fpm-systemd now uses only pkg-config for libsystem checks. The
libsystemd minimum required version is 209.

– GD:
. –with-gd becomes –enable-gd (whether to enable the extension at all) and
–with-external-gd (to opt into using an external libgd, rather than the
bundled one).
. –with-png-dir has been removed. libpng is required.
. –with-zlib-dir has been removed. zlib is required.
. –with-freetype-dir becomes –with-freetype.
. –with-jpeg-dir becomes –with-jpeg.
. –with-webp-dir becomes –with-webp.
. –with-xpm-dir becomes –with-xpm.

– IMAP:
. –with-kerberos no longer accepts a directory.

– Intl:
. –with-icu-dir has been removed. If –enable-intl is passed, then libicu is
always required.

– Ldap:
. –with-ldap-sasl no longer accepts a directory.

– Libxml:
. –with-libxml-dir has been removed.
. –enable-libxml becomes –with-libxml.
. –with-libexpat-dir has been renamed to –with-expat and no longer accepts a
directory.

– LiteSpeed:
. –with-litespeed becomes –enable-litespeed.

– Mbstring:
. –with-onig has been removed. Unless –disable-mbregex has been passed,
libonig is required.

– ODBC:
. –with-iodbc no longer accepts a directory.
. –with-unixODBC without a directory now uses pkg-config (preferred).
Directory is still accepted for old versions without libodbc.pc.

– OpenSSL:
. –with-openssl no longer accepts a directory.
. –with-kerberos no longer accepts a directory.

– PCRE:
. –with-pcre-regex has been removed. Instead –with-external-pcre is provided
to opt into using an external PCRE library, rather than the bundled one.

– PDO_SQLite:
. –with-pdo-sqlite no longer accepts a directory.

– Readline:
. –with-libedit no longer accepts a directory.

– Sodium:
. –with-sodium no longer accepts a directory.

– SQLite3:
. –with-sqlite3 no longer accepts a directory.

– XSL:
. –with-xsl no longer accepts a directory.

– Zip:
. –with-libzip has been removed.
. –enable-zip becomes –with-zip.

========================================
14. Other Changes
========================================

========================================
15. Performance Improvements
========================================

– Core:
. A specialized VM opcode for the array_key_exists() function has been added,
which improves performance of this function if it can be statically
resolved. In namespaced code, this may require writing \array_key_exists()
or explicitly importing the function.

– PCRE:
. When preg_match() in UTF-8 mode (“u” modifier) is repeatedly called on the
same string (but possibly different offsets), it will only be checked for
UTF-8 validity once.

Referrence: PHP.Net

Petua Hilangkan Bengkak

Bengkak boleh berlaku disebabkan pelbagai punca. Tergeliat, terseliuh, cedera semasa bersukan, kemalangan, dan sebagainya. Jom kami kongsikan petua hilangkan bengkak khas untuk anda.

petua hilangkan bengkak 

1. Tepung gandum & halia

Bahan-bahan yang diperlukan ialah:

  • Tepung Gandum
  • Halia

Cara-cara menggunakannya:

  • Ambil halia secukupnya dan tumbuk dengan lesung batu. Nak blender pun boleh
  • Setelah hancur campurkan dengan sedikit tepung gandum. Jangan terlalu banyak cukup sekadar menjadi agen pelekat sahaja
  • Tampalkan pada kawasan yang sedang membengkak. Lazimnya bahagian yang ditampal akan terasa panas sedikit, jangan risau biarkan saja. Jika terlampau panas boleh kurangkn dos halia yang digunakan mengikut kesesuaian.
  • Biarkan selama satu jam
  • Petua ini boleh dibuat setiap hari sehingga bengkak kembali kecut

Selain menghilangkan bengkak, petua di atas juga boleh digunakan untuk melegakan sakit urat seperti terseliuh, sakit pinggang, sakit lutut, lenguh-lenguh belakang atau mana-mana bahagian tubuh, amsa, sesak nafas, perut kembung. Caranya hanya perlu tampalkan atau lumurkan pada bahagian-bahagian yang bermasalah.

Untuk merawat masalah lutut, lumurkan bahan yang telah siap ini ke seluruh lutut termasuk bahagian pelipat , dan lebihkan 3 inci ke atas bahagianlutut ,iaitu sebahagian daripada peha.

2. Halia

Tumbuk halia dan tampal pada tempat bengkak. Tutup dengan daun yang lebar atau plastik, kemudian balutkan dgn kain atau bandage. Petua ini membantu mengecutkan bengkak, melancarkn pengaliran darah, melembutkan urat yang tegang, dan membuang angin yang tersekat seperti perut kembung akibat angin.

petua hilangkan bengkak

3. Beras, lengkuas & air

Hanya 3 bahan  diperlukan untuk surutkan bengkak menggunakan petua ini. Bahan-bahannya:

  • Segenggam beras
  • Segenggam lengkuas
  • Sedikit air

Caranya: Beras direndam 1 jam sebelum ditumbuk. Lengkuas pula dibasuh hingga bersih. Tak perlu dibuang kulitnya. Tumbuk kedua-dua bahan tadi hingga lumat. Bila dah agak hancur, boleh tambahkan sedikit air. Teruskan menumbuk hingga betul-betul halus. Bila dah hancur, boleh masukkan ke dalam bekas. Siap untuk digunakan. Sapu rata pada bahagian yang bengkak. Biarkan seketika supaya bahan-bahan meresap. Bila dah agak kering, bolehlah bilas semula dengan air bersih. Sapu waktu malam biarkan semalaman. InsyaAllah esok pagi dah susut.

4. Petua hilangkan bengkak kaki akibat mengandung

>Wanita mengandung biasanya akan mengalami bengkak kaki apabila kandungan semakin besar. Jika anda mengalaminya, boleh amalkan petua dibawah:

1. Lumurkan asam jawa &  garam pada kaki dan tangan yang bengkak, Biarkan semalam 30 minit hingga 1 jam.

2. Posisikan kaki lebih tinggi dari dada. Hal ini dapat membantu mengurangkan gejala kaki bengkak kerana mempermudahkan aliran darah kembali ke jantung.

3. Kurangkan pengambilan garam dalam makanan. Kaki bengkak terjadi kerana ketika hamil seorang wanita mengalami perubahan kadar hormon. Pelepasan hormon-hormon sepanjang kehamilan menyebabkan tubuh menahan lebih banyak cairan dan sodium (garam).

4. Rajin bersenam. Jangan berbaring atau duduk. Banyakkan pergerakan badan dan lakukan senaman ringan. Berjalan-jalan di shopping complex pun ok.

5. Tinggikan kaki semasa duduk atau baring. Sewaktu duduk pastikan kaki bengkak sentiasa melunjur. Jangan biar tergantung di bawah. Sewaktu baring atau tidur, kaki bengkak hendaklah lebih tinggi daripada badan. Boleh alas bantal di bawah kaki.

5. Petua hilangkan bengkak akibat patah atau retak

Ini adalah petua tradisional yang sangat berkesan. Bahan-bahan yang diperlukan:

  • 2 batang serai
  • Telur putih
  • Sehelai daun melung (juga dikenali sebagai daun tembaga suasa)
  • Kain Pembalut

Caranya, tumbuk serai sehingga lumat, masukkan putih telur. Jangan sampai berair, agak-agak sesuai dengan serai. Balut bersama dengan daun melung dan akhir sekali sudahkan balutan dengan kain pembalut, ikat agar serai tak beralih tempat. Pakai sebelum tidur  selama 3 malam berturut-turut, pagi esok boleh dibasuh.

6. Jangan urut

Elakkan terus mengurut kawasan yang bengkak. Mengurut tempat bengkak adalah sangat menyakitkan dan boleh menyebabkan bengkak lebih teruk. Urutan hanya dibenarkan selepas 48-72 jam bengkak berlaku.

7. Jangan tuam haba

Tuaman haba akan menyebabkan salur darah mengembang lantas mempercepatkan dan mempertingkatkan proses keradangan. Tuaman menggunakan haba hanya dibenarkan selepas 48-72 jam kecederaan berlaku.

petua hilangkan bengkak

8. Jangan sapu minyak panas atau minyak gamat

Sama seperti tuaman haba, menyapu minyak panas dan minyak gamat akan menyebabkan salur darah mengembang lantas mempercepatkan dan mempertingkatkan proses keradangan. Sapuan minyak hanya dibenarkan selepas 48-72 jam kecederaan berlaku.

9. Jangan abaikan kesakitan

Jika kesakitan dan bengkak yang dialami terlalu kuat, itu tanda-tanda kecederaan yang anda alami agak parah. Jumpalah doktor, terutamanya jika ada kebas-kebas jari, sendi terkehel keluar, kelumpuhan, dan luka.

10. Perlu berehat

Rehat yang dimaksudkan ialah mengurangkan gerakan sendi yang bengkak dan tidak menggunakan kaki yang tercedera untuk berjalan. Gunakanlah tongkat ketiak(axillary crutches), tongkat lengan(elbow crutches) atau kerusi roda untuk bergerak.

11. Tuam ais

Sejurus selepas  bengkak, lakukan tuaman ais. Tuaman ais selama 20 minit setiap 2-3 jam dapat mengurangkan kesakitan dan mengelakkan bengkak yang teruk. Rejim tuaman ais ini disarankan dibuat sehingga 48-72 selepas kecederaan.

12. Balut dengan bandage

Balutan ini untuk beri tekanan dan mengurangkan pergerakan pada sendi yang bengkak. Ini dapat menghalang bengkak besar daripada terjadi. Namun, pastikan tidak balut terlampau ketat sehingga bekalan darah tersekat.

petua hilangkan bengkak

13. Tinggikan anggota badan yang bengkak

Anggota yang bengkak perlu diletakkan tinggi. Sewaktu duduk pastikan kaki bengkak sentiasa melunjur. Jangan biar tergantung di bawah. Sewaktu baring atau tidur, kaki bengkak hendaklah lebih tinggi daripada badan. Boleh alas bantal di bawah kaki.

Jika rawatan di rumah tidak mengurangkan bengkak dan kesakitan, itu tandanya anda kena berjumpa doktor. Dikhuatiri ada kecederaan yang serius atau penyakit lain. Semoga bermanfaat!

Sumber: Bidadari.My

Start using Git version control on the command line

If you want to start using Git version control and GitLab, make sure that you have created and/or signed into an account on GitLab.

Open a shell 

Depending on your operating system, you will need to use a shell of your preference. Here are some suggestions:

Check if Git has already been installed 

Git is usually preinstalled on Mac and Linux.

Type the following command and then press enter:

git --version

You should receive a message that tells you which Git version you have on your computer. If you don’t receive a “Git version” message, it means that you need to download Git.

If Git doesn’t automatically download, there’s an option on the website to download manually. Then follow the steps on the installation window.

After you are finished installing Git, open a new shell and type git --version again to verify that it was correctly installed.

Add your Git username and set your email 

It is important to configure your Git username and email address, since every Git commit will use this information to identify you as the author.

On your shell, type the following command to add your username:

git config --global user.name "YOUR_USERNAME"

Then verify that you have the correct username:

git config --global user.name

To set your email address, type the following command:

git config --global user.email "your_email_address@example.com"

To verify that you entered your email correctly, type:

git config --global user.email

You’ll need to do this only once, since you are using the --global option. It tells Git to always use this information for anything you do on that system. If you want to override this with a different username or email address for specific projects, you can run the command without the --global option when you’re in that project.

Check your information 

To view the information that you entered, along with other global options, type:

git config --global --list

Basic Git commands 

Go to the master branch to pull the latest changes from there 

git checkout master

Download the latest changes in the project 

This is for you to work on an up-to-date copy (it is important to do this every time you start working on a project), while you set up tracking branches. You pull from remote repositories to get all the changes made by users since the last time you cloned or pulled the project. Later, you can push your local commits to the remote repositories.

git pull REMOTE NAME-OF-BRANCH

When you first clone a repository, REMOTE is typically “origin”. This is where the repository came from, and it indicates the SSH or HTTPS URL of the repository on the remote server. NAME-OF-BRANCH is usually “master”, but it may be any existing branch.

View your remote repositories 

To view your remote repositories, type:

git remote -v

Create a branch 

To create a branch, type the following (spaces won’t be recognized in the branch name, so you will need to use a hyphen or underscore):

git checkout -b NAME-OF-BRANCH

Work on an existing branch 

To switch to an existing branch, so you can work on it:

git checkout NAME-OF-BRANCH

View the changes you’ve made 

It’s important to be aware of what’s happening and the status of your changes. When you add, change, or delete files/folders, Git knows about it. To check the status of your changes:

git status

View differences 

To view the differences between your local, unstaged changes and the repository versions that you cloned or pulled, type:

git diff

Add and commit local changes 

You’ll see your local changes in red when you type git status. These changes may be new, modified, or deleted files/folders. Use git add to stage a local file/folder for committing. Then use git commit to commit the staged files:

git add FILE OR FOLDER
git commit -m "COMMENT TO DESCRIBE THE INTENTION OF THE COMMIT"

Add all changes to commit 

To add and commit all local changes in one command:

git add .
git commit -m "COMMENT TO DESCRIBE THE INTENTION OF THE COMMIT"

Note: The . character typically means all in Git.

Send changes to gitlab.com 

To push all local commits to the remote repository:

git push REMOTE NAME-OF-BRANCH

For example, to push your local commits to the master branch of the origin remote:

git push origin master

Delete all changes in the Git repository 

To delete all local changes in the repository that have not been added to the staging area, and leave unstaged files/folders, type:

git checkout .

Delete all untracked changes in the Git repository 

git clean -f

Unstage all changes that have been added to the staging area 

To undo the most recent add, but not committed, files/folders:

git reset .

Undo most recent commit 

To undo the most recent commit, type:

git reset HEAD~1

This leaves the files and folders unstaged in your local repository.Warning: A Git commit is mostly irreversible, particularly if you already pushed it to the remote repository. Although you can undo a commit, the best option is to avoid the situation altogether.

Merge created branch with master branch 

You need to be in the created branch.

git checkout NAME-OF-BRANCH
git merge master

Merge master branch with created branch 

You need to be in the master branch.

git checkout master
git merge NAME-OF-BRANCH

Sumber: Gitlab.Com