Pra sair de um foreach (ou while) só usar break
Exemplo:
for($i=1; $i<=10; $i++){ if($i > 5) break; echo $i."<br>"; }
Desenvolvimento Web, Administração Linux e Curiosidades
Pra sair de um foreach (ou while) só usar break
Exemplo:
for($i=1; $i<=10; $i++){ if($i > 5) break; echo $i."<br>"; }
Tenho um script que automatiza os commits/pulls em um repositorio git que, na realidade não utilizo para versionamento, e sim para controlar quando alguem faz modificações não autorizadas com possibilidade de rollback.
Em um determinado momento o script parava no pull (custei a perceber isso) o que acontecia por causa da necessidade de merge.
Assim, para forçar um overwrite de arquivos locais (merge bypass) usamos o comando abaixo:
git reset --hard HEAD git pull
Agradecimentos ao meu colega jb que me passou o parametro para isto.
Cenário: Alguem aplicou chmod 777 recursivo no /etc de um servidor web, alguns clientes tem conta de ssh limitadas, mas com esse nível de permissão qualquer um poderia ler/modificar configurações do servidor.
A contagem de arquivos no /etc é de aproximadamente 2600 arquivos, o que tornaria aplicar chmod manualmente em cada uma delas.
Por sorte esse servidor seria uma maquina virtual, onde outras provem do mesmo template. Entretanto coo /etc de um para outro não é uma opção, poiso template de origem foi o mesmo, mas as configs são diferentes em cada um
Neste caso a solução foi simples, copiei o /etc de um servidor para dentro do /root deste com problema, no caso fiquei com /etc/ e /root/etc/. OBS: gzipiei e copiei, pra manter as permissões.
Usei a flag –reference do chmod pra copiar somente as permissões.
Comando executado:
for i in `/usr/bin/find /etc/`; do /bin/chmod --reference=/root$i $i; done
explicando em miúdos:
executei um find no /etc/ para obter todos os arquivos, usando um for para varrer cada linha e executando chmod em arquivo por arquivo do /etc baseado nas permissões existentes em /root/etc/
Util em shell scripts:
valid=1 [ $valid ] && x=1 || x=0
Mesmo código em php (para compreensão)
$valid = True; $x = ($valid) ? 1 : 0;
Quando aparecer esse erro logado como sysdba
gbak: ERROR:Your user name and password are not defined. Ask your database administrator to set up a Firebird login.
gbak:Exiting before completion due to errors
Resolvi setando uma nova senha pro sysdba com o gsec
[10:50:51 root@localhost ~]# gsec GSEC> modify SYSDBA -pw n0v4s3nh4
A melhor configuração que achei, postei pra nao esquecer UHAuaH
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
Dica do meu colega Luciano (AKA Aspira)
http://www.burst.net/vps.shtml
Eles tem datacenter nos EUA e Europa, o preço vale tanto pra vps windows como pra linux.
vou contratar os dois 😛
Pra efetuar um grant de select restringindo range de IP e senha
GRANT SELECT ON BANCO.`TABELA` TO 'USUARIO'@'10.1.1.%' identified by 'SENHA';
Se necessitar outros grants, pode ser no mesmo comando separado por virgula.
Ex: Grant de SELECT, INSERT e UPDATE
GRANT SELECT,INSERT,UPDATE ON BANCO.`TABELA` TO 'USUARIO'@'10.1.1.%' identified by 'SENHA';
Compartilho com todos a classe criada por mim para utilização com oracle, todos estão livres para utilizar, copiar e modificar, mas por favor, peço que mantenahm os créditos, pois dediquei um bom de pesquisa nisso!
final class oracle { /* * Classe para conexão e queries a banco oracle * Criado em 02/10/2011 por Felipe Braz * Versão 1.1 * Duvidas sugestões: fbraz3 [arroba] gmail.com * Copia/modificação livre desde que se mantenham os créditos */ public $oci_error; private $conexao = null; private $username = null; private $password = null; private $uri = null; public function get_instance($username, $password, $uri) { $this->username = $username; $this->password = $password; $this->uri = $uri; return $this; } public function __construct() { //Sem construtor } public function connect() { if (!$this->conexao = @oci_connect($this->username, $this->password, $this->uri)) { $this->oci_error = @oci_error($this->conexao); die("Erro ao conectar ao Oracle " . $this->oci_error['text']); } } public function query($sql) { $stmt = @oci_parse($this->conexao, $sql); $r = @oci_execute($stmt); $this->oci_error = oci_error($stmt); return $r; } }
Exemplos de uso:
Instanciar conexão ao banco com os seguintes dados:
Banco de dados: testeoracle
Senha: s3nh40r4cl3
URL de conexao: 10.1.1.1/oracle
$obj = new oracle; $obj->get_instance('testeoracle','s3nh40r4cl3','10.1.1.1/oracle')->connect();
Uma vez conectado pode-se efetuar uma query livre usando o método query()
$res = $obj->query("SELECT * FROM USUARIOS"); var_dump($res);
Para obter todos os dados da tabela, pode-se usar a função do php oci_fetch_array()
$res = $obj->query("SELECT * FROM USUARIOS"); while($r = oci_fetch_array($res)) { echo $r['usuario']."n"; }
Os erros retornados ficam no atributo publico oci_error.
Exemplo de tratamento de erro:
//conexão $obj = new oracle; $obj->get_instance('testeoracle','s3nh40r4cl3','10.1.1.1/oracle')->connect(); //Consulta na tabela USUARIOS $res = $obj->query("SELECT * FROM USUARIOS"); //Se retornou erro, debuga ele e mata o script if($obj->oci_error) { print_r($obj->oci_error); die(); } //Loop para obter todos os dados da tabela while($r = oci_fetch_array($res)) { echo $r['usuario']."n"; }
COmo podem ver, a classe é bem simples, porém extremamente funcional para uso com oracle.
Funciona na maioria dos servers compartilhados:
function get_server_load($windows = 0) { $os = strtolower(PHP_OS); if(strpos($os, "win") === false) { if(file_exists("/proc/loadavg")) { $load = file_get_contents("/proc/loadavg"); $load = explode(' ', $load); return $load[0]; } elseif(function_exists("shell_exec")) { $load = explode(' ', `uptime`); return $load[count($load)-1]; } else { return ""; } } elseif($windows) { if(class_exists("COM")) { $wmi = new COM("WinMgmts:\\."); $cpus = $wmi->InstancesOf("Win32_Processor"); $cpuload = 0; $i = 0; while ($cpu = $cpus->Next()) { $cpuload += $cpu->LoadPercentage; $i++; } $cpuload = round($cpuload / $i, 2); return "$cpuload%"; } else { return ""; } } }
Use com moderação 😉