{"id":9980,"date":"2016-06-15T14:48:51","date_gmt":"2016-06-15T17:48:51","guid":{"rendered":"https:\/\/king.host\/blog\/?p=9980"},"modified":"2024-06-04T07:31:28","modified_gmt":"2024-06-04T10:31:28","slug":"porque-atualizar-versao-do-php-para-5-6","status":"publish","type":"post","link":"https:\/\/king.host\/blog\/tecnologia\/porque-atualizar-versao-do-php-para-5-6\/","title":{"rendered":"Por que atualizar a vers\u00e3o do PHP para a 5.6?"},"content":{"rendered":"<p>\u00c9 dif\u00edcil manter nossos sistemas atualizados, sobretudo aqueles que apresentam maior complexidade. Por\u00e9m, se atualizarmos um pouquinho a cada dia, essa tarefa se torna mais tranquila. Neste artigo vamos falar do por que atualizar a <strong>vers\u00e3o do PHP para a 5.6<\/strong>.<\/p>\n<p>Muitos acreditam que a atualiza\u00e7\u00e3o de sistemas demanda tempo e dinheiro, mas n\u00e3o visualizam que esta atividade pode, justamente, evitar que voc\u00ea venha a perd\u00ea-los em caso de um comprometimento do mesmo devido a falhas de seguran\u00e7a.<\/p>\n<p>Atualizar seus sistemas,<strong> al\u00e9m de torn\u00e1-los mais seguros e menos suscet\u00edveis a invas\u00f5es<\/strong>, permite, muitas vezes,<strong> acesso a novas funcionalidades<\/strong>, al\u00e9m de um desempenho superior, trazendo assim uma melhor experi\u00eancia para seus usu\u00e1rios e\/ou clientes<\/p>\n<p>Para tornar sua vida mais f\u00e1cil durante este processo, traremos neste artigo um <strong>breve tutorial para lhe auxiliar em manter sua vers\u00e3o do PHP sempre atualizada<\/strong>.<\/p>\n<h2>O que eu ganho atualizando a vers\u00e3o de PHP de meus sistemas?<\/h2>\n<p>H\u00e1 v\u00e1rias raz\u00f5es para fazer a atualiza\u00e7\u00e3o do PHP. Uma delas \u00e9 o fato das <strong>vers\u00f5es anteriores \u00e0 5.6 estarem descontinuadas<\/strong>. Ou seja, elas n\u00e3o oferecem mais atualiza\u00e7\u00f5es de seguran\u00e7a, deixando seus sistemas vulner\u00e1veis a ataques maliciosos.<\/p>\n<p>Outros dois bons motivos para atualizar s\u00e3o a <strong>performance e o consumo de recursos<\/strong>. A cada vers\u00e3o do PHP, a velocidade de execu\u00e7\u00e3o de scripts \u00e9 melhorada, al\u00e9m deles utilizarem cada vez menos recursos computacionais. Para corroborar esta afirma\u00e7\u00e3o, o gr\u00e1fico abaixo demonstra o quanto uma aplica\u00e7\u00e3o PHP pode atender a mais requisi\u00e7\u00f5es apenas efetuando a troca de vers\u00e3o.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-18811 size-full\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2016\/06\/migracao.png\" alt=\"migra\u00e7\u00e3o\" width=\"627\" height=\"372\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2016\/06\/migracao.png 627w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2016\/06\/migracao-300x178.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2016\/06\/migracao-400x237.png 400w\" sizes=\"(max-width: 627px) 100vw, 627px\" \/><\/p>\n<p>Bacana, n\u00e9? Em nosso post sobre o <a href=\"https:\/\/king.host\/blog\/2017\/11\/php-72-lancamento\/\" target=\"_blank\" rel=\"noopener\"><strong>lan\u00e7amento do PHP 7.2<\/strong><\/a>, falamos mais sobre a performance das vers\u00f5es <strong>7.x em compara\u00e7\u00e3o com as antigas vers\u00f5es 5.x<\/strong>. Tamb\u00e9m j\u00e1 destacamos a <strong><a href=\"https:\/\/king.host\/blog\/2018\/07\/atualizar-versao-php\/\" target=\"_blank\" rel=\"noopener\">import\u00e2ncia de manter suas vers\u00f5es de PHP atualizadas<\/a><\/strong>.<\/p>\n<h2>OK! Voc\u00eas me convenceram. Para qual vers\u00e3o atualizar minha aplica\u00e7\u00e3o?<\/h2>\n<p>Se voc\u00ea utiliza atualmente uma vers\u00e3o do PHP inferior \u00e0 vers\u00e3o 5.6, indico inicialmente a atualiza\u00e7\u00e3o para esta vers\u00e3o, a fim de aproveitar agora mesmo os ganhos de performance e seguran\u00e7a que esta vers\u00e3o traz para a s\u00e9rie 5.x sem que ocorra grandes incompatibilidades.<\/p>\n<p>Por\u00e9m, como a vers\u00e3o 5.6 entrar\u00e1 em final de ciclo de vida (EOL) no final deste ano, foque seus esfor\u00e7os em migrar para a s\u00e9rie 7.x, visto que a vers\u00e3o 5.6 entra no final de seu ciclo de vida em novembro de 2018.<\/p>\n<h2>O que mudou no PHP 5.6 que eu devo me preocupar?<\/h2>\n<p>Agora vamos entender as fun\u00e7\u00f5es que est\u00e3o sendo descontinuadas e como compatibilizar sua aplica\u00e7\u00e3o.<\/p>\n<ul>\n<li>Suporte a nova sintaxe para arrays<\/li>\n<\/ul>\n<p>Foi adicionado suporte ao short array syntax, em vez de declarar um array sendo<\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">$antigo = array(\"Laranja\", \"Rosa\", \"Vermelho\", \"Preto\");<\/pre>\n<p>agora \u00e9 poss\u00edvel declarar como<\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">$novo = [\"Laranja\", \"Rosa\", \"Vermelho\", \"Preto\"];<\/pre>\n<p>Outras novidades podem ser vistas no\u00a0<strong><a href=\"http:\/\/php.net\/manual\/pt_BR\/migration56.php\" target=\"_blank\" rel=\"noopener\">manual de migra\u00e7\u00e3o<\/a><\/strong>.<\/p>\n<p><strong>Outras mudan\u00e7as importantes\u00a0<\/strong><\/p>\n<ul>\n<li>MySQL\u00a0=&gt; MySQLi<\/li>\n<\/ul>\n<p>Algumas fun\u00e7\u00f5es da extens\u00e3o mysql vem se tornando obsoletas desde a vers\u00e3o 5.3 do PHP, \u00a0algumas inclusive, j\u00e1 foram removidas da vers\u00e3o 7. Como alternativa, \u00e9 poss\u00edvel utilizar as extens\u00f5es PDO_MySQL ou a mysqli, conforme exemplos abaixo:<\/p>\n<p>O c\u00f3digo de conex\u00e3o com o mysql era<\/p>\n<pre class=\"plain:false plain-toggle:false copy:false expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">mysql_connect($host,$username,$password) or die ('ERROR: Could not connect to server!');\nmysql_select_db($database) or die('Could not connect to db!');<\/pre>\n<p>Agora \u00e9<\/p>\n<pre class=\"plain-toggle:false expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">$db = mysqli_connect($host,$username,$password,$database) or die ('ERROR: Could not connect to database!');<\/pre>\n<p>Para alterar uma base era<\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">mysql_select_db($database);<\/pre>\n<p>Agora \u00e9<\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">mysqli_select_db($db, $database);<\/pre>\n<p>Para executar queries o c\u00f3digo era<\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">mysql_query(\"SELECT * WHERE 1\");<\/pre>\n<p>Agora \u00e9<\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true\">mysqli_query(\"SELECT * WHERE 1\");<\/pre>\n<p>Outras fun\u00e7\u00f5es ficaram<\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">mysql_affected_rows -&gt; mysqli_affected_rows($link)\nmysql_close -&gt; mysqli_close($link)\nmysql_data_seek -&gt; mysqli_data_seek( $result, $offset)\nmysql_errno -&gt; mysqli_errno( $link)\nmysql_error -&gt; mysqli_error( $link)\nmysql_fetch_array -&gt; mysqli_fetch_array( $result, $type)\nmysql_fetch_assoc -&gt; mysqli_fetch_assoc( $result)\nmysql_fetch_lengths -&gt; mysqli_fetch_lengths( $result )\nmysql_fetch_object -&gt; mysqli_fetch_object( $result, $class, $params)\nmysql_fetch_row -&gt; mysqli_fetch_row( $result)\nmysql_field_seek -&gt; mysqli_field_seek( $result, $number)\nmysql_free_result -&gt; mysqli_free_result(result)\nmysql_get_client_info -&gt; mysqli_get_client_info( $link)\nmysql_get_host_info -&gt; mysqli_get_host_info( $link)\nmysql_get_proto_info -&gt; mysqli_get_proto_info( $link)\nmysql_get_server_info -&gt; mysqli_get_server_info( $link)\nmysql_info -&gt; mysqli_info( $link)\nmysql_insert_id -&gt; mysqli_insert_id( $link)\nmysql_num_rows -&gt; mysqli_num_rows( $result)\nmysql_ping -&gt; mysqli_ping( $link)\nmysql_query -&gt; mysqli_query( $link, $query)\nmysql_real_escape_string -&gt; mysqli_real_escape_string( $link)\nmysql_select_db - &gt; mysqli_select_db( $link, $database)\nmysql_set_charset -&gt; mysqli_set_charset( $link, $charset)\nmysql_stat -&gt; mysqli_stat( $link)\nmysql_thread_id -&gt; mysqli_thread_id( $link)<\/pre>\n<ul>\n<li>magic_quotes =&gt; addslashes()<\/li>\n<\/ul>\n<p>O uso do <strong>magic_quotes<\/strong> foi descontinuado pelo PHP, com isso ganhamos mais performance no PHP.<br \/>\n\u00c9 poss\u00edvel utilizar a fun\u00e7\u00e3o <strong>addslashes()<\/strong>, quando necess\u00e1rio, para substituir o magic_quotes<br \/>\nUm exemplo de uso abaixo<\/p>\n<p>ex. 1:<br \/>\n<!--?php \/\/string que ser\u00e1 escapada caso haja caracteres como aspa simples echo \"Altered Text: \".addslashes($_POST['question']); ?--><\/p>\n<form method=\"post\">\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">&lt;?php\n\/\/string que ser\u00e1 escapada caso haja caracteres como aspa simples\necho \"Altered Text: \".addslashes($_POST['question']);\n?&gt;\n&lt;form method='post'&gt;\nQuestion: &lt;input type='text' name='question'\/&gt;&lt;br \/&gt;\n&lt;input type='submit'&gt;\n&lt;\/form&gt;<\/pre>\n<\/form>\n<p>ex. 2:<\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">&lt;?php\n$str = \"Is your name O'Reilly?\";\n\/\/ Outputs: Is your name O\\'Reilly?\necho addslashes($str);\n?&gt;<\/pre>\n<ul>\n<li>ereg, eregi =&gt; preg_match()<\/li>\n<\/ul>\n<p>Tanto a fun\u00e7\u00e3o ereg quanto a eregi foram removidas da vers\u00e3o mais recente do PHP devido a bugs encontrados nelas.<br \/>\nO uso dessas fun\u00e7\u00f5es podem ser<\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">&lt;?php\n\/\/eregi =&gt; preg_match\n$string = 'XYZ';\neregi('z', $string, $r);\nvar_dump($r);\n\n$string = 'XYZ';\n\/\/o parametro i depois do ultimo delimitador indica a configuracao case-insensitive\npreg_match('\/z\/i', $string, $matches);\nvar_dump($matches);\n?&gt;<\/pre>\n<p><!--?php \/\/ereg =&gt; preg_match&lt;br ?--><\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">&lt;?php\n\/\/ereg =&gt; preg_match\n$date = date(\"Y-m-d\");\nereg(\"([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})\", $date, $r);\nvar_dump($r);\n\n$date = date(\"Y-m-d\");\npreg_match(\"\/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})\/\", $date, $matches);\nvar_dump($matches);\n?&gt;<\/pre>\n<ul>\n<li>ereg_replace, eregi_replace =&gt; preg_replace()<\/li>\n<\/ul>\n<p>Assim como o ereg() e o eregi(), as fun\u00e7\u00f5es ereg_replace() e eregi_replace() tamb\u00e9m foram removidas na vers\u00e3o mais recente do PHP.<br \/>\nEssas fun\u00e7\u00f5es podem ser facilmente substitu\u00eddas pela fun\u00e7\u00e3o preg_replace(), abaixo um exemplo para a migra\u00e7\u00e3o da fun\u00e7\u00e3o.<\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">&lt;?php\n\/\/ereg_replace =&gt; preg_replace() \n$num = '5';\n$string = \"Essa frase tem cinco palavras.\";\n$string = ereg_replace('cinco', $num, $string);\nvar_dump($string);\n\n$num = '5';\n$string = \"Essa frase tem cinco palavras.\";\n$string = preg_replace('\/cinco\/', $num, $string);\nvar_dump($string);\n?&gt;<\/pre>\n<p><!--?php \/\/ereg_replace =&gt; preg_replace()&lt;br ?--><\/p>\n<p><!--?php \/\/eregi_replace =&gt; preg_replace()&lt;br ?--><\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">&lt;?php\n\/\/eregi_replace =&gt; preg_replace() \n$num = '5';\n$string = \"Essa frase tem cinco palavras.\";\n$string = eregi_replace('CINCO', $num, $string);\nvar_dump($string);\n\n$num = '5';\n$string = \"Essa frase tem cinco palavras.\";\n$string = preg_replace('\/CINCO\/i', $num, $string);\nvar_dump($string);\n?&gt;<\/pre>\n<ul>\n<li>session_register, session_unregister, session_is_registered =&gt; $_SESSION<\/li>\n<\/ul>\n<p>As fun\u00e7\u00f5es session_register(), session_unregister() e session_is_registered() deixaram de funcionar desde a vers\u00e3o 5.4 do PHP.\u00a0Por\u00e9m, \u00e9 poss\u00edvel utilizar a a vari\u00e1vel super global $_SESSION. Abaixo alguns exemplos para substitui\u00e7\u00e3o.<\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true\">&lt;?php\n\/\/session_register()\n$barney = \"A big purple dinosaur.\";\nsession_register(\"barney\");\n\n$_SESSION[\"barney\"] = \"A big purple dinosaur.\";\n?&gt;<\/pre>\n<p><!--?php \/\/session_is_registered() $barney = \"A big purple dinosaur.\"; session_register(\"barney\"); if(session_is_registered(\"barney\")){ echo \"registrado.\\n\"; }else{ echo \"n\u00e3o registrado.\\n\"; } $_SESSION[\"barney\"] = \"A big purple dinosaur.\"; if(isset($_SESSION[\"barney\"])){ echo \"registrado.\\n\"; }else{ echo \"n\u00e3o registrado.\\n\"; } ?--><\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">&lt;?php\n\/\/session_unregister()\n$barney = \"A big purple dinosaur.\";\nsession_register(\"barney\");\nsession_unregister(\"barney\");\n\n$_SESSION[\"barney\"] = \"A big purple dinosaur.\";\nunset($_SESSION[\"barney\"]);\n?&gt;<\/pre>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">&lt;?php\n\/\/session_is_registered()\n$barney = \"A big purple dinosaur.\";\nsession_register(\"barney\");\nif(session_is_registered(\"barney\")){\n\techo \"registrado.\\n\";\n}else{\n\techo \"n\u00e3o registrado.\\n\";\n}\n\n$_SESSION[\"barney\"] = \"A big purple dinosaur.\";\nif(isset($_SESSION[\"barney\"])){\n\techo \"registrado.\\n\";\n}else{\n\techo \"n\u00e3o registrado.\\n\";\n}\n\n?&gt;<\/pre>\n<ul>\n<li>php_mssql =&gt; sql_srv<\/li>\n<\/ul>\n<p>A biblioteca mssql j\u00e1 n\u00e3o vem mais habilitada desde a vers\u00e3o 5.3 do PHP. Atualmente a microsoft desenvolveu o driver sqlServ, que pode ser utilizada como substituto ao php_mssql.<br \/>\nAbaixo uma tabela com as fun\u00e7\u00f5es e suas compara\u00e7\u00f5es.<\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">MSSQL Function =&gt; SQLSRV Equivalent Function(s)\nmssql_bind =&gt; sqlsrv_query\nWith the sqlsrv API, stored procedure parameters are defined in an array that is passed to sqlsrv_query or sqlsrv_prepare. For more information and examples, see How to: Retrieve Output Parameters, How to: Retrieve Input\/Output Parameters, and sqlsrv_next_result.\n\nmssql_close =&gt; sqlsrv_close\nThese functions are equivalent, but note that calling sqlsrv_close returns a connection to a connection pool. For more information, see Connection Pooling.\n\nmssql_connect =&gt; sqlsrv_connect\nThese functions are equivalent, but note that sqlsrv_connect attempts to use a pooled connection before it creates a new one. For more information, see Connection Pooling.\n \nmssql_data_seek =&gt; sqlsrv_fetch or sqlsrv_fetch_array\nThe sqlsrv API provides forward-only reading of result sets by default. However, in v1.1 of the driver, you can specify and retrieve any row of a result set with sqlsrv_fetch or sqlsrv_fetch_array. For more information, see Specifying a Cursor Type and Selecting Rows.\n \nmssql_execute =&gt; sqlsrv_query\nThere are no special functions for executing stored procedures in the sqlsrv API. Stored procedures are executed with the sqlsrv_query function. For more information and examples, see How to: Retrieve Output Parameters, How to: Retrieve Input\/Output Parameters, and sqlsrv_next_result.\n\nmssql_fetch_array =&gt; sqlsrv_fetch_array\nThese functions are equivalent.\n \nmssql_fetch_assoc =&gt; sqlsrv_fetch_array\nThe sqlsrv_fetch_array function returns a row with both numeric and associative indexes by default. You can retrieve only an associative array by using the SQLSRV_FETCH_ASSOC constant in the function call.\n\nmssql_fetch_batch =&gt; No equivalent function.\nWhile the sqlsrv API does not have a function equivalent of mssql_fetch_batch, the number of rows in a result set can obtained using sqlsrv_num_rows. As you process rows, you can track the number of remaining rows.\n\nmssql_fetch_field =&gt; sqlsrv_field_metadata\nThese functions both return metadata about a result set, although they each return slightly different metadata. See mssql_fetch_field and  for sqlsrv_field_metadata details.\n \nmssql_fetch_object =&gt; sqlsrv_fetch_object\nThese functions are equivalent.\n \nmssql_fetch_row =&gt; sqlsrv_fetch_array\nThese functions are equivalent, but note that the sqlsrv_fetch_array function returns an array with both numeric and associative indexes by default. You can retrieve only a numeric array by using the SQLSRV_FETCH_NUMERIC constant in the function call.\n \nmssql_field_length =&gt; No equivalent function.\nNote that for some field types, the maximum length is returned by the sqlsrv_field_metadata function.\n\nmssql_field_name =&gt; sqlsrv_field_metadata\nIn addition to other information, the field name is retuned by the sqlsrv_field_metadata function.\n \nmssql_field_seek =&gt; No equivalent function.\nWhen using the sqlsrv_get_field function, fields must be accessed in order. The sqlsrv API does not provide a way to access fields randomly.\n \nmssql_field_type =&gt; sqlsrv_field_metadata\nIn addition to other information, the field name is retuned by the sqlsrv_field_metadata function.\n\nmssql_free_result =&gt; sqlsrv_cancel\nThese functions are equivalent.\n\nmssql_free_statement =&gt; sqlsrv_free_stmt\nThese functions both free resources associated with a statement, but note that the sqlsrv_free_stmt does this for any statement (not only statements associated with stored procedures).\n \nmssql_get_last_message =&gt; sqlsrv_errors\nThese functions both return error information about the last operation performed, but the sqlsrv_errors function returns information in an array (error code and error message).\n \nmssql_guid_string =&gt; No equivalent function.\nWhile the sqlsrv API does not provide a function for converting GUIDs to strings, you can convert GUIDS to string-compatible types on the server with the CONVERT function.\n \nmssql_init =&gt; No equivalent function.\nThere is no special function for initializing stored procedures in the sqlsrv API. Stored procedures are executed with the sqlsrv_query function. For more information and examples, see How to: Retrieve Output Parameters, How to: Retrieve Input\/Output Parameters, and sqlsrv_next_result.\n\nmssql_min_error_severity =&gt; No equivalent function.\nThe sqlsrv API does not provide functionality for filtering errors based on severity. For information on handling errors with the sqlsrv API, see How to: Configure Error and Warning Handling and How to: Handle Errors and Warnings.\n \nmssql_min_message_severity =&gt; No equivalent function.\nThe sqlsrv API does not provide functionality for filtering errors based on severity. For information on handling errors with the sqlsrv API, see How to: Configure Error and Warning Handling and How to: Handle Errors and Warnings.\n \nmssql_next_result =&gt; sqlsrv_next_result\nThese functions are equivalent.\n \nmssql_num_fields =&gt; sqlsrv_num_fields\nThese functions are equivalent.\n \nmssql_num_rows =&gt;  sqlsrv_num_rows\nThese functions are equivalent.\n\nmssql_pconnect =&gt; sqlsrv_connect\nThe default behavior of the sqlsrv_connect function is to open a pooled connection if one is available. When a script ends or when sqlsrv_close is called, the connection is returned to the connection pool. For more information, see Connection Pooling.\n\nmssql_query =&gt; sqlsrv_query\nThese functions are equivalent.\n\nmssql_result =&gt; sqlsrv_fetch\/sqlsrv_get_field\nThe combination of the sqlsrv_fetch and sqlsrv_get_field functions are equivalent to the mssql_result function. Calling sqlsrv_fetch makes a row of data available for reading and sqlsrv_get_field reads fields in the current row.\n\nmssql_rows_affected =&gt; sqlsrv_rows_affected\nThese functions are equivalent.\n\nmssql_select_db =&gt; No equivalent function.\nTo select a database with the sqlsrv API, use sqlsrv_query to execute the following query: USE databaseName.<\/pre>\n<p><strong> Retirado do <a href=\"https:\/\/blogs.msdn.microsoft.com\/brian_swan\/2010\/03\/10\/mssql-vs-sqlsrv-whats-the-difference-part-2\/\" target=\"_blank\" rel=\"noopener\">blog MSDN da Microsoft<\/a>.<\/strong><\/p>\n<ul>\n<li>split =&gt; explode<\/li>\n<\/ul>\n<p>A fun\u00e7\u00e3o split tornou-se obsoleta na vers\u00e3o 5.3. H\u00e1 alternativas para substitui\u00e7\u00e3o, como preg_split(), str_split() ou explode().<br \/>\nAbaixo exemplo utilizando explode().<\/p>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">&lt;?php\n\/\/split\n$data = \"foo:*:1023:1000::\/home\/foo:\/bin\/sh\";\nlist($user, $pass, $uid, $gid, $extra) =\n    split(\":\", $data, 5);\n?&gt;<\/pre>\n<pre class=\"expand-toggle:false decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true\">&lt;?php\n\/\/explode\n$data = \"foo:*:1023:1000::\/home\/foo:\/bin\/sh\";\nlist($user, $pass, $uid, $gid, $extra) =\n    explode(\":\", $data, 5);\n?&gt;<\/pre>\n<h2>Eu n\u00e3o manjo de programa\u00e7\u00e3o PHP. #comofaz?<\/h2>\n<p>Para voc\u00ea, que deseja utilizar uma nova vers\u00e3o de PHP mas n\u00e3o possui dom\u00ednio da linguagem para realizar grandes altera\u00e7\u00f5es no c\u00f3digo, compartilho com voc\u00ea um projeto que foi criado para PHP 7 e superior, que com um simples include em seus scripts PHP, te permite usar fun\u00e7\u00f5es descontinuadas em vers\u00f5es superiores de PHP. Voc\u00ea encontra o projeto no <a href=\"https:\/\/github.com\/kinghost\/php5-compat\/tree\/master\/src\" target=\"_blank\" rel=\"noopener\">Github<\/a>.<br \/>\nVeja abaixo um trecho do c\u00f3digo que retirei do projeto de como foram feitas as cria\u00e7\u00e3o das fun\u00e7\u00f5es de compatibilidade:<\/p>\n<pre class=\"lang:php decode:true\">if (!function_exists('ereg')) {\n    function ereg($pattern, $subject, &amp;$matches = array())\n    {\n        return preg_match('\/' . $pattern . '\/', $subject, $matches);\n    }\n}\n<\/pre>\n<p>Vale ressaltar que para cada fun\u00e7\u00e3o foi utilizado \u201c<a href=\"http:\/\/php.net\/manual\/pt_BR\/function.function-exists.php\" target=\"_blank\" rel=\"noopener\"><strong>function_exists<\/strong><\/a>\u201d. Ou seja, s\u00f3 ir\u00e1 definir a fun\u00e7\u00e3o se esta j\u00e1 n\u00e3o existir, impedindo assim que a fun\u00e7\u00e3o seja reescrita caso a vers\u00e3o do PHP selecionada j\u00e1 possua esta fun\u00e7\u00e3o definida nativamente.<\/p>\n<p>Para utiliz\u00e1-las, baixe os arquivos para o seu FTP e utilize a fun\u00e7\u00e3o <a href=\"http:\/\/php.net\/manual\/pt_BR\/function.include.php\" target=\"_blank\" rel=\"noopener\"><strong>include<\/strong><\/a> do PHP. Abaixo, uma simples demonstra\u00e7\u00e3o de uso:<\/p>\n<pre class=\"lang:default decode:true\">&lt;?php\ninclude 'wrapper-legacy.php';\ninclude 'wrapper-mssql.php';\ninclude 'wrapper-mysql.php';\n?&gt;\n<\/pre>\n<p>A partir deste momento, voc\u00ea poder\u00e1 <strong>utilizar fun\u00e7\u00f5es descontinuadas<\/strong> como, por exemplo, o ereg:<\/p>\n<pre class=\"lang:php decode:true\">&lt;?php\ninclude 'wrapper-legacy.php';\ninclude 'wrapper-mssql.php';\ninclude 'wrapper-mysql.php';\n\n\tif (ereg (\"([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})\", $date, $regs)) {\n   \t\t echo \"$regs[3].$regs[2].$regs[1]\";\n} else {\n    \t\techo \"Formato data inv\u00e1lido: $date\";\n}\n\n?&gt;<\/pre>\n<p>Para que n\u00e3o precise fazer os <strong>3 includes em todos os seus scripts<\/strong>, indico que crie um arquivo, por exemplo, <strong>autoload.php<\/strong>, adicione os includes necess\u00e1rios e s\u00f3 chame este <strong>autoload.php<\/strong> nos scripts que necessitarem deles. Caso sua aplica\u00e7\u00e3o tenha um script que seja instanciado em todos os seus script, fa\u00e7a o include deste script <strong>autoloader.php<\/strong> neste arquivo.<\/p>\n<p>Conte\u00fado elaborado pelo colaborador\u00a0pelo colaborador Franklin Guimar\u00e3es Fernandes Junior &#8211; Analista de Infraestrutura na KingHost, com atualiza\u00e7\u00e3o de Diego Cassolli em Agosto\/2018.<\/p>\n<p>Fique ligado no <strong><a href=\"https:\/\/king.host\/blog\/tag\/php\/\" target=\"_blank\" rel=\"noopener\">Blog da KingHost<\/a><\/strong> para mais novidades e materiais sobre <a href=\"https:\/\/king.host\/blog\/tag\/php\/\" target=\"_blank\" rel=\"noopener\"><strong>PHP<\/strong><\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00c9 dif\u00edcil manter nossos sistemas atualizados, sobretudo aqueles que apresentam maior complexidade. Por\u00e9m, se atualizarmos um pouquinho a cada dia, essa tarefa se torna mais tranquila. Neste artigo vamos falar do por que atualizar a vers\u00e3o do PHP para a 5.6. Muitos acreditam que a atualiza\u00e7\u00e3o de sistemas demanda tempo e dinheiro, mas n\u00e3o visualizam [&hellip;]<\/p>\n","protected":false},"author":277,"featured_media":18812,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1179,8],"tags":[1374],"class_list":["post-9980","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimento","category-tecnologia","tag-php"],"_links":{"self":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/9980","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/users\/277"}],"replies":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/comments?post=9980"}],"version-history":[{"count":4,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/9980\/revisions"}],"predecessor-version":[{"id":35813,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/9980\/revisions\/35813"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media\/18812"}],"wp:attachment":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media?parent=9980"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/categories?post=9980"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/tags?post=9980"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}