I'm surprised this isn't mentioned in docs here, but to set these values at runtime use "ini_set()". For example:
<?php
ini_set("auto_detect_line_endings", true);
// Now I can invoke fgets() on files that contain silly \r line endings.
?>
O comportamento dessas funções podem ser modificado pelas configurações do php.ini.
Nome | Padrão | Modificável | Changelog |
---|---|---|---|
allow_url_fopen | "1" | PHP_INI_SYSTEM | |
allow_url_include | "0" | PHP_INI_SYSTEM | Obsoleto desde o PHP 7.4.0. |
user_agent | NULL | PHP_INI_ALL | |
default_socket_timeout | "60" | PHP_INI_ALL | |
from | "" | PHP_INI_ALL | |
auto_detect_line_endings | "0" | PHP_INI_ALL | |
sys_temp_dir | "" | PHP_INI_SYSTEM |
Uma rápida explicação das diretivas de configuração.
allow_url_fopen
bool
Esta opção ativa o dispositivo URL fopen wrappers que permite o acesso a objetos URL como arquivos. São disponibilizados por padrão wrappers para acesso de arquivos remotos utilizando os protocolos FTP ou HTTP, e algumas extensões como a zlib podem registar wrappers adicionais.
allow_url_include
boolean
Esta função permite o uso de wrappers URL com as seguintes funções include, include_once, require, require_once.
Nota:
Esta definição requer que allow_url_fopen esteja on.
user_agent
string
Define o user agent que o PHP irá enviar.
default_socket_timeout
int
Timeout padrão (em segundos) para streams baseados em socket. Informar um valor negativo significa timeout infinito.
from
string
O endereço de email a ser utilizado em conexões FTP sem autenticação e o valor do header From de conexões HTTP, quando utilizando os wrappers ftp e http, respectivamente.
auto_detect_line_endings
bool
Quando ativo, o PHP irá examinar os dados lidos por fgets() e file() para verificar se está sendo utilizado a convenção de fim de linha Unix, MS-DOS ou Macintosh.
Isto ativa a interoperabilidade do PHP com sistemas Macintosh, mas seu padrão é Off, porque isso causa uma pequena perda de performance na detecção da convenção de fim de linha num primeiro momento e porque as pessoas que utilizam o fim de linha como separadores de itens sob sistemas Unix podem experimentar problemas de falta de compatibilidade.
sys_temp_dir
string
I'm surprised this isn't mentioned in docs here, but to set these values at runtime use "ini_set()". For example:
<?php
ini_set("auto_detect_line_endings", true);
// Now I can invoke fgets() on files that contain silly \r line endings.
?>
Please note that although you may try to set default_socket_timeout to something over 20s, you may get tricked by the Linux kernel.
The default value of tcp_syn_retries is set to 5, which will effectively timeout any TCP connection after roughly 20s, no matter what limits you set in PHP higher than this.
The value can be altered by root only, like this:
echo 6 > /proc/sys/net/ipv4/tcp_syn_retries
A value of 6, as above, will give you a timeout up to ~45s.
If you want to use auto_detect_line_endings, e.g. to recognize carriage return on a Classic Mac file, you must set it before calling fopen. You can then reset it to its original value. E.g,
$original = ini_get("auto_detect_line_endings");
ini_set("auto_detect_line_endings", true);
$handle = fopen($someFile, "r");
ini_set("auto_detect_line_endings", $original);
while (($line = fgets($handle)) !== false) {
echo "$line\n"; // etc
}
(Reference: https://bugs.php.net/bug.php?id=63341&edit=2)
Keep in mind also that Mac OS X bash does not handle carriage returns well, so if it seems like your code is not working when testing from the command line, redirect your output to a file and then try looking at that. On my system, doing it directly on the command line only showed the last line (with or without this setting turned on).
Also note that this will not do what you want if you have a file with mixed line endings (!). If you really care about that case, you have to do something else, like run the file through a translation first and then read it.