Monthly Archiv: July, 2019

php|architect: Find the Way With Elasticsearch

How are you going to find that? You don’t want to implement a search engine on your own as your content grows or integrate with real-world places and addresses. Instead, leverage the rich feature set of an established solution like ElasticSearch. This month we look at how to integrate it with y...

PHP: Hypertext Preprocessor: PHP 7.2.20 Released

The PHP development team announces the immediate availability of PHP 7.2.20. This is a bugfix release.All PHP 7.2 users are encouraged to upgrade to this version.For source downloads of PHP 7.2.20 please visit our downloads page, Windows source and binaries can be found on windows.php.net/download/....

501 Not Implemented

A server can return 501 Not Implemented when it doesn’t support a certain feature.

The RFC specifically lists ‘not supporting a specific HTTP method on any resource’ as an example of this.

In most practical cases this is similar enough to 405 Method Not Allowed, and 405 is probably the clearer status code for most cases.

But there is a difference. Given that 5xx are server-side errors and 4xx errors are client-side errors, it could be argued that emitting a 405 means that a method should never really have been called by a client, but a 501 could mean that the method should have worked, but the server has incomplete functionality.

I sometimes use 501 during development of new API’s as a ‘stub response’ for features I intend to build, but haven’t built yet.

Example

HTTP/1.1 501 Not Implemented
Content-Type text/html

<img src="http://geocities.example/work-in-progress.gif" />

References

Community News: Latest PECL Releases (07.09.2019)

Latest PECL Releases:

  • rdkafka 3.1.2
    * Fix build

  • ahocorasick 0.0.7
    Issue #21 fixed. Problem with buffering all previous searches in the trie.
  • swoole 4.4.0
    Backward incompatible changes ---
    • Consistent with PHP official, no longer supports PHP7.0 (@matyhtf)
    • Remove the Serialize module, which is maintained in a separate ext-serialize extension. Reason: Due to frequent changes to the PHP kernel, stability cannot be guaranteed
    • Remove the PostgreSQL module and maintain it in a separate ext-postgresql extension. Reason: PostgreSQL uses asynchronous ways in the kernel and lacks the necessary unit tests to guarantee quality
    • Runtime::enableCoroutine is no longer automatically compatible with the internal and external environment of the Coroutine. Once enabled, all blocking operations must be called in the Coroutine (@matyhtf)
    • Due to the introduction of the new CoroutineMySQL client driver, the underlying design is more standardized, but there are some small downward incompatible changes
      • CoroutineMySQL-&gt;fetch/nextResult is optimized for on-demand reads, which will trigger IO scheduling
      • When the defer attribute is on, the request of statement needs to use statement-&gt;recv to receive the response
      • When the defer/fetch_mode feature is enabled, if there is unreceived data, a new request will be banned
      • Unlike asynchronous, the connected attribute is no longer updated based on events in real-time (It's not reliable) but is updated after the IO operation fails
    • CoroutineHttpClient-&gt;set_cookie_headers no longer have key names (#2664) (@twose)

    Deprecated content

    • The Buffer module will be discarded. Reason: It is highly replaceable and has low usage. It can be replaced by PHP string or fopen(&quot;memory&quot;)
    • The Lock module will be discarded. Reason for discarding: There may be problems with locking in the Coroutine. You can use Chan to implement the Lock of the Coroutine version
    • Since async stream_socket_pair is introduced, it is recommended to enable the hook by flag SWOOLE_HOOK_STREAM_FUNCTION instead of SWOOLE_HOOK_STREAM_SELECT

    New features

    • Added Library, using pure PHP to write kernel functions instead of C/C++, providing the following features
      • Added high quality PHP module CoroutineWaitGroup (@twose)
      • Use the PHP code to implement the CURL hook, one-click to make the CURL non-blocking, currently the experimental feature, you need to call Runtime::enableCoroutine(SWOOLE_HOOK_CURL) to open (@matyhtf) (@Yurunsoft)
      • Use PHP code to implement exec/shell_exec of Coroutine version (#2657) (@Yurunsof)
      • When RuntimeHook is turned on, the function array_walk, array_walk_recursive will be replaced by the version of Swoole, which will solve the problem that the native function cannot be reentrant, but it will not be able to traverse object (@matyhtf) (@twose)
    • Added a new Coroutine Preemptive Scheduler to prevent the Coroutine from taking too long CPU time to cause other Coroutine to starve. Open the swoole.enable_preemptive_scheduler = On by php.ini. For details, see preemptive_scheduler (@shiguangqi)
    • Added Timer::list() to get TimerIterator, which can traverse all timers, TimerclearAll clears all timers, Timerinfo(int $id) gets timer information, Timer::stats() gets the global timer status (#2498) (@twose)
    • Added two methods getOption and setOption for CoroutineSocket (9d13c29) (@matyhtf)
    • Added $master_pid property and shutdown method to ProcessPool (a1d6eaa) (@matyhtf)
    • Added the 4th parameter of the constructor of ProcessPool, when true, the underlying layer will automatically create the Coroutine in the onWorkerStart callback (8ceb32cd) (@matyhtf)
    • Support non-blocking stream_socket_pair in Runtime hook (#2546) (@matyhtf)
    • Added static_handler_locations setting of HttpServer to set static file path (@matyhtf)
    • Added CoroutineHttpClient-&gt;setBasciAuth method to automatically send Authorization header (#2542) (@hongbshi)
    • Added CoroutineHttp2Client-&gt;ping method (40041f6) (@shiguangqi)
    • Added task_use_object (#2659) (aa01317) (@twose)

    Enhancement

    • New CoroutineMySQLClient driver (#2538) (@twose)
      • The underlying programming mode using C++ and Coroutine (sync writing, async performance)
      • Support SSL connection (configure [&#039;ssl&#039; =&gt; true] when connect)
      • Support request with large data (unlimited)
      • Support response with large data (unlimited)
      • Support fetch to read by line (now fetch is read on demand, data without fetch does not consume user memory) (#2106)
      • Support nextResult read on demand (ibid)
      • Optimized protocol parser
      • date related type decimal precision support
      • Error code and information are consistent with PDO/mysqli
    • CoroutineRedis compatibility mode, enabled by $redis-&gt;set([&#039;compatibility_mode&#039; =&gt; true]), which can make the result of hmGet/hGetAll/zRange/zRevRange/zRangeByScore/zRevRangeByScore consistent with phpredis (#2529) (@caohao-php)
    • Now 100K Coroutine are allowed to exist at the same time by default (c69d320b) (@twose)
    • Support bailout (can exit the process correctly when a fatal error occurs in the Coroutine) (#2579) (@twose)
    • Server can display a friendly 400/404/503 when error occurred (@matyhtf) (f3f2be9d)
    • Server enable reload_async and send_yield by default (#2555) (9d4a4c47) (@matyhtf)
    • Server-&gt;onFinish callback is in Coroutine (@twose)
    • CoroutineHttpClient enable websocket_mask by default (c02f4f85) (@twose)
    • Scheduling operation of Channel outside the Coroutine is no longer allowed (519b6043) (@twose)
    • WebSocketServer will close the connection when the handshake fails (#2510) (@twose)
    • Under the Linux, the dead parent process will automatically send a signal to kill the child process (4b833a3d) (@matyhtf)
    • Memory optimization of Socket-&gt;recv (642a3552) (@twose)
    • Floating point calculation optimization (#2572) (@tangl163)
    • All built-in classes prohibit cloning/serializing/unseting-declared-properties (f9c974b8) (@twose)
    • Server-&gt;bind will generate a warning and return false when uid is more than UINT32_MAX
    • Support PHP7.4 (#2506) (@twose)

    Fixed

    • Fixed getProcess of ProcessPool (#2522) (@matyhtf)
    • Fixed a bug that exceptions were ignored in some special cases (@twose)
    • Fixed memory leak by timer after fork process (8f3abee7) (@twose)
    • Fixed timezone on non-Linux systems (#2584) (@devnexen)
    • Fixed enable_coroutine=false + task_enable_coroutine=true (#2585) (@matyhtf)
    • Fixed Http2's trailer method can not output a empty value header (#2578) (@twose)
    • Fixed CoroutineHttpClient-&gt;setCookies memory error in special cases (#2644) (@Yurunsoft)
    • Fixed #2639 (#2656) (@mabu233)
    • Fixed arginfo_swoole_process_pool_getProcess (#2658) (@mabu233)
    • Fixed static_handler does not support soft links (@matyhtf)
    • Fixed a bug (I don't know how to describe it) (22504dd4) (@matyhtf)
    • Fixed Server-&gt;getClientInfo error (#2639) (@matyhtf)
    • Fixed an illegal operation of the same Socket with multiple Coroutine operations (#2661) (@twose)
    • Fixed swoole_table iterator coredump (#2663) (@mabu233)

    Coroutine scheduler ?

    • Added SwooleCoroutineScheduler class as the entry for the cli script, replacing go() + SwooleEvent::wait()
    • Added SwooleCoroutineRun function to provide wrapper for SwooleCoroutineScheduler
    • go() + SwooleEvent::wait() may be deprecated

    Internal

    • Continuous underlying code quality optimization work (@swoole)
    • More unit tests, and use the assertion library swoole/assert based on webmozart/assert secondary development (@twose)
    • Completely abolish the Windows support plan
    • CoroutineHttp2Client refactor (f64874c3) (@matyhtf)
    • The faster callback function caller (@twose)

    Experimental content

    • May add CoroutineServer and CoroutineHttpServer in 5.0
  • solr 2.5.0
    - Atomic Updates (partials) - Simple Optimistic Concurrency - Compatibility with PHP 7.1, 7.2, 7.3, latest 7.4 - Enable gzip encoding if server supports it - Fix Real Time Get requests fails if it wasn't the first request - Fix addQueryField return wrong query - Fix Solr Extension build fail with curl 7.19+
  • gRPC 1.22.0
    - gRPC C Core 1.22 update
  • rdkafka 3.1.1
    * Expose query watermark offsets (#219, @gytislakavicius) * Support sending timestamp (epoch ms) in producev (#228, @lkm) * Fix KafkaTopic::producev causing segfault on librdkafka 1.0.0 (#222, @Steveb-p) * Fix version parsing (#224, @dariuskasiulevicius)
  • datadog_trace 0.29.0
    ### Fixed - Edge case where the extension version and userland version can get out of sync #488

    Changed

    • Prefix hostnames as service names with host- to ensure compatibility with the Agent #490
Powered by Gewgley