Archive for December, 2007

Problema /sbin/loader no Fedora 8

Friday, December 28th, 2007

Problema /sbin/loader no Fedora 8

Estava tentando instalar o Fedora 8 em meu notebook (ontem), e o pau quebrou… na realidade o “pc travou”.
Muito irritado com isso decidi pesquisar e encontrei a saída, e mais uma vez “lá vai MASTIGADINHO”.

Terreno
Observe o notebook, lindo, possante e observe também o seu cd do fedora 8, que te deixa curioso… e no ato da instalação observe que o miserável fica “durinho” no console, na parte /sbin/loader, e você, como uma estátua (isso mesmo, versão nova sem funcionar… ninguém merece) fica olhando, aquela janela que NÃO dá sinal de vida.

Ao combate
Coloque o dvd e dê o boot em seu fedora, no momento em que ele abrir o menu, pressione a tecla desejada para “colocar informações de boot”. Feito isto, coloque EXATAMENTE a linha abaixo (observe que NÃO é necessário apagar nada que tem antes, só acrescente…):

acpi=off apm=off pci=noacpi

Feito isso, seu Fedora continuará instalando NORMALMENTE (acredite)…

Agradecimentos a joaopaulo.

Fedora: BroadCom 43xx sem muitas dores de cabeça!

Thursday, December 27th, 2007

Gente, hoje quebrei o pau para instalar essa peste desta broadcom no meu Fedora 8, e agora (mais uma vez, só para variar) vou entregar MASTIGADINHO:

Terreno
O que você precisa é ter  instalado o F8 (funciona no F7), ter uma imagem i386 (pode tentar x86_64, mas EU não tive o privilégio de instalar e NEM RECOMENDO pois Fedora “é a cobaia da Rhel”), ter paciência (ver trecho em aspas duplas) e uma internet para tal feito.

Ao combate
Faça tudo como root

yum update

depois
yum install bcm43xx-fwcutter b43-fwcutter

depois
faça download do arquivo a seguir (versão 4 do b43)-> http://downloads.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2

depois
faça download do arquivo a seguir (versão 3 do  bcm43xx) ->
http://downloads.openwrt.org/sources/wl_apsta-3.130.20.0.o

depois (sobre o b43)
b43-fwcutter -w /lib/firmware /path/to/kmod/wl_apsta.o

depois (sobre b43legacy)
b43-fwcutter -w /lib/firmware /path/to/wl_apsta-3.130.20.0.o

depois (sobre bcm43xx)
bcm43xx-fwcutter -w /lib/firmware /path/to/wl_apsta-3.130.20.0.o

depois
echo “alias wlan0 b43″ >> /etc/modprobe.conf

depois
echo “alias wlan0 b43legacy” >> /etc/modprobe.conf

recarregando drivers
rmmod b43 && modprobe b43

depois
rmmod b43legacy && modprobe b43legacy

(lembre-se que no LINDO F8 (citei e repito, “cobaia do rhel”) as coisas “nem sempre funcionam”, mesmo como root, talvez o modprobe e o rmmod não preste, eles não estão no $PATH, para isso, dentro do /sbin use, por exemplo ./modprobe …)

Links adicionais:

http://bcm43xx.berlios.de/
http://linuxwireless.org/en/users/Drivers/b43
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=186329


tell_not_null: Corrigindo PagSeguro

Friday, December 14th, 2007
Este é o script que espero que consigam entender e mudar o que for necessário.. no final onde você vai mudar o domínio, lembre também de mudar o nome da pasta do WHMCS.. no nosso exemplo utilizamos ‘billing’
<?
function tep_not_null($value) {
if (is_array($value)) {
if (sizeof($value) > 0) {
return true;
} else {
return false;
}
} else {
if (($value != ”) && ($value != ‘NULL’) && (strlen(trim($value)) > 0)) {
return true;
} else {
return false;
}
}
}
function whmcs_query($query){
$host = “localhost”;
$dbname = “SEU BANCO DE DADOS DO WHMCS“;
$user = “USUARIO DO BANCO“;
$pass = “SENHA DO BANCO“;
$conn = mysql_connect($host, $user, $pass) or die(‘Error connecting to database, reason: ‘ . mysql_error());
$db = mysql_select_db($dbname, $conn);
// Perform Query to Database
$sql_result = mysql_query($query, $conn) or die(‘Error performing database query: ‘. mysql_error());
// Close Database Connection
mysql_close($conn);
return $sql_result;
}
//DEFINE O LOGIN E SENHA PARA CONEXÃO COM O BANCO DE DADOS
$ConnLocal = “localhost”;
$ConnLogin = “USUARIO DO BANCO DE DADOS PARA OUTROS REGISTROS“;
$ConnSenha = “SENHA DO BANCO DE DADOS PARA OUTROS REGISTROS“;
$ConnDatabase = “BANCO DE DADOS PARA OUTROS REGISTROS“;
// CONECTA-SE COM O BANCO DE DADOS MySQL
$Conn = mysql_connect($ConnLocal, $ConnLogin, $ConnSenha) or print (‘Não foi possível conectar<br />’ . mysql_error());
$db2 = mysql_select_db($ConnDatabase, $Conn) or print(mysql_error());
// RECEBE O POST ENVIADO PELA PagSeguro E ADICIONA OS VALORES PARA VALIDAÇÃO DOS DADOS
$PagSeguro = ‘Comando=validar’;
$PagSeguro .= ‘&Token=SEU TOKEN AQUI‘;
$Cabecalho = “”;
foreach ($_POST as $key => $value)
{
$value = urlencode(stripslashes($value));
$PagSeguro .= “&$key=$value”;
}
if (function_exists(‘curl_exec’))
{
//Prefira utilizar a função CURL do PHP
//Leia mais sobre CURL em: http://us3.php.net/curl

$curl = true;
}
elseif ( (PHP_VERSION >= 4.3) && ($fp = @fsockopen (‘ssl://pagseguro.uol.com.br’, 443, $errno, $errstr, 30)) )
{
$fsocket = true;
}
elseif ($fp = @fsockopen(‘pagseguro.uol.com.br’, 80, $errno, $errstr, 30))
{
$fsocket = true;
}
// ENVIA DE VOLTA PARA A PagSeguro OS DADOS PARA VALIDAÇÃO
if ($curl == true)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, ‘https://pagseguro.uol.com.br/Security/NPI/Default.aspx’);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $PagSeguro);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$resp = curl_exec($ch);
if (!tep_not_null($resp))
{
curl_setopt($ch, CURLOPT_URL, ‘https://pagseguro.uol.com.br/Security/NPI/Default.aspx’);
$resp = curl_exec($ch);
}
curl_close($ch);
$confirma = (strcmp ($resp, “VERIFICADO”) == 0);
}
elseif ($fsocket == true)
{
$Cabecalho = “POST /Security/NPI/Default.aspx HTTP/1.0\r\n”;
$Cabecalho .= “Content-Type: application/x-www-form-urlencoded\r\n”;
$Cabecalho .= “Content-Length: ” . strlen($PagSeguro) . “\r\n\r\n”;
if ($fp || $errno>0)
{
fputs ($fp, $Cabecalho . $PagSeguro);
$confirma = false;
$resp = ”;
while (!feof($fp))
{
$res = @fgets ($fp, 1024);
$resp .= $res;
// Verifica se o status da transação está VERIFICADO
if (strcmp ($res, “VERIFICADO”) == 0)
{
$confirma=true;
break;
}
}
fclose ($fp);
}
else
{
echo “$errstr ($errno)<br />\n”;
// ERRO HTTP
}
}
if ($confirma)
{
// RECEBE OS DADOS ENVIADOS PELA PagSeguro E ARMAZENA EM VARIÁVEIS
//Selecione aqui todos os parâmetros enviados pela PagSeguro
$TransacaoID = $_POST['TransacaoID'];
$Referencia = $_POST['Referencia'];
$StatusTransacao = $_POST['StatusTransacao'];
$CliNome = $_POST['CliNome'];
$NumItens = $_POST['NumItens'];
$ProdValor = $_POST['ProdValor_1'];
$idcliente = whmcs_query(“select userid from tblinvoices where id=’$Referencia’”);
$row = mysql_fetch_row($idcliente);
$ic = $row[0];
$hora = date(‘Y-m-d H:i:s’);
$resultjh = whmcs_query(“select transid from tblaccounts where transid=’$TransacaoID’”);
whmcs_query(“insert into tblaccounts (userid,gateway,date,description,amountin,fees,amountout,transid,invoiceid) values (‘$ic’,'brpay’,'$hora’,'Registro de transação’,’0.00′,’0.00′,’0.00′,’$TransacaoID’,'$Referencia’)”);
if ($StatusTransacao==”Completo” || $StatusTransacao==”Aprovado” ) {
$ProdValor_MB = str_replace(“.”, “”, $ProdValor);
$ProdValor_MB = str_replace(“,”, “.”, $ProdValor_MB);
$ProdValor_MB = number_format($ProdValor_MB, 2, ‘.’, ”);
$r45 = whmcs_query(“select status from tblinvoices where id=’$Referencia’”);
$row=mysql_fetch_row($r45);
if($row[0]!=”Paid”){
$strcurl = “username=LOGIN DE ADMIN DO WHMCS AQUI&password=SENHA DO LOGIN DE ADMIN DO WHMCS EM MD5 AQUI&action=addinvoicepayment&invoiceid=$Referencia&transid=$TransacaoID&amount=$ProdValor_MB&fees=0.00&gateway=brpay”;
$sessions = curl_init();
curl_setopt($sessions,CURLOPT_URL,’http://www.SEU DOMINIO.COM/billing/includes/api.php’);
curl_setopt($sessions, CURLOPT_POST, 1);
curl_setopt($sessions,CURLOPT_POSTFIELDS,”$strcurl”);
curl_exec($sessions);
curl_close($sessions);
if (curl_errno($sessions)) {
$men = curl_error($sessions);
}
}
$SQL = “INSERT INTO TransacoesPagSeguro (” .
“TransacaoID, ” .
“Referencia, ” .
“StatusTransacao, ” .
“CliNome, ” .
“NumItens” .
“) VALUES (” .
“” .
“‘” . $TransacaoID . “‘, ” .
“‘” . $Referencia . “‘, ” .
“‘” . $StatusTransacao . “‘, ” .
“‘” . $CliNome . “‘, ” .
“‘” . $NumItens . “‘” .
“)”;
$Executa = mysql_query($SQL) or print(mysql_error());
}
else
{
if (strcmp ($res, “FALSO”) == 0)
{
// LOG para investigação manual
}
}
}
// FECHA A CONEXÃO
mysql_close($Conn);
?>

phplive: charset no phplive

Thursday, December 13th, 2007

Passamos 3 dias procurando o bendito do charset no phplive e graças ao bom Deus, um de nossos membros da equipe de suporte achou este abençoado.

Para ajustar o charset no phplive, o bendito do arquivo que contém o charset é o chat_session.php

PHP: Abrir arquivo, localizar termo, sobrescrever e sair.

Tuesday, December 11th, 2007

As dicas aqui, EXIGEM que você tenha lido o post anterior de inserir texto ao rodapé de página, POIS todos os parâmetros de “preparo do terreno são o mesmo”.

Hoje estava queimando as pestanas para localizar um termo dentro de 6166 arquivos, substituir este termo por outro e sair do arquivo de forma “insana”. Segue script MASTIGADINHO:

<?
$contador = 6166;
$i = 0;
$linha = file(‘ver.txt’);
while( $i <= $contador )
{
if(file_exists($linha[$i]))
{
echo “existe”;
}
else
{
echo “nao existe”;
}

if(is_writable($linha[$i]))
{
echo ‘ permite escrita’;
echo ‘</br>’;
}
echo “$linha[$i]“;
//file_put_contents($linha[$i], $conteudo, FILE_APPEND);
$linha[$i] = trim($linha[$i]);

$open = fopen(trim($linha[$i]), ‘r+’);
$file = fread($open, filesize(trim($linha[$i])));
$open = fopen($linha[$i], ‘w+’);

$arquivo_alt = str_replace(‘UTF-8′, ‘ISO-8859-1′, $file);
fwrite($open, $arquivo_alt);

if(!$open)
{
echo “o arquivo $linha[$i] nao abre”;
exit();
}

fclose($open);
$i++;
}

?>

#################

A única coisa interessante está aqui:

$open = fopen(trim($linha[$i]), ‘r+’);
$file = fread($open, filesize(trim($linha[$i])));
$open = fopen($linha[$i], ‘w+’);

$arquivo_alt = str_replace(‘UTF-8′, ‘ISO-8859-1′, $file);
fwrite($open, $arquivo_alt);

Observe o seguinte -> linha 1 deste exemplo: abre o arquivo (trim remove espaços em branco) com poder de leitura e escrita e coloca o ponteiro no início do arquivo.

linha 2: usa fread para ler o arquivo que tem permissão de escrita e leitura com ponteiro no início e pega o tamanho do arquivo.

$arquivo_alt = str_replace(‘UTF-8′, ‘ISO-8859-1′, $file);
fwrite($open, $arquivo_alt);

linha 3: abre o arquivo com poder de escrita e coloca o ponteiro no início do arquivo.

Abre o arquivo ($file), procura por UTF-8, substitui por ISO… e confirma a escrita com a função fwrite. Os demais passos estão contidos no post anterior.

PHP: Adicionar Linha em arquivos de texto com php (6166 arquivos)

Monday, December 10th, 2007
Há 2 semanas estive em um “calça justa” , pois estava necessitando colocar o rodapé de uma empresa (link) , para que, ao ser acessada uma documentação de 6166 páginas o link da empresa fosse exibido no rodapé. Consegui solucionar o caso, mas ralei pra caramba (2 dias), visto que não é minha praia usar funções para edição de arquivos. Mas segue a dica.
Terreno
Estava em uma plataforma linux, aonde pude fazer os testes.
Os arquivos para serem editas, tinham extensão .HTML (documentação online)
Partindo pra CIMA
1-> esteja certo de que é o root da máquina.
2-> espero que esteja no diretório aonde todos os arquivos estão (6166, para ser mais preciso)
3-> use o comando:
ls >> ver.txt
A saída acima lista os arquivos e os coloca em cadeia ajustada dentro do arquivo ver.txt, a saída ficaria (listando conteúdo de ver.txt) mais ou menos assim:
arquivo1.html
arquivo2.html
assim sucessivamente…
Feito isso, devemos assegurar que TODOS os arquivos tem permissão de escrita total, principalmente quando estamos tratando de um servidor local, o qual, se o php não for em CGI estará utilizando a permissão nobody (default do apache como módulo).
Vamos para o arquivo PHP que fará a edição dos 6166 arquivos, colocando um link no rodapé de todos.
Arquivo da Benção
<?
$conteudo = ‘<a href=”http://www.linkdorodape.com.br”>Hospedado por EMPRESA X</a>’;
$contador = 6166;
$i = 0;
$linha = file(‘ver.txt’);
while( $i <= $contador )
{
if(file_exists($linha[$i]))
{
echo “existe”;
}
else
{
echo “nao existe”;
}if(is_writable($linha[$i]))
{
echo ‘ permite escrita’;
echo ‘</br>’;
}
echo “$linha[$i]“;
//file_put_contents($linha[$i], $conteudo, FILE_APPEND);
$linha[$i] = trim($linha[$i]);
$abrir = fopen($linha[$i], ‘a+’);
if(!$abrir)
{
echo “o arquivo $linha[$i] nao abre”;
exit();
}
$writer = fwrite($abrir, $conteudo);
fclose($abrir);
$i++;
}

?>

Salve este arquivo como replacer.php

Basta executar que ele vai editar TODOS os arquivos que estão listados em ver.txt e que estão na mesma pasta que ELE.

Explicando o Script

Vou comentar cada linha para que vocês entendam minha “coisa prima”.

linha 1: <?

Essa é a tag de abertura do PHP.

linha 2: $conteudo = ‘<a href=”http://www.linkdorodape.com.br”>Hospedado por EMPRESA X</a>’;

Esta variável de Strings contém a informação exata de nosso rodapé, que na realidade é um link de uma empresa, mas pode ser qualquer texto ou tag que desejar.

linha 3: $contador = 6166;

Esta variável contém o número de arquivos total para que delimite um loop mais a frente.

linha 4: $i = 0;

Esta variável define o valor inicial para o loop.

linha 5: $linha = file(‘ver.txt’);

Esta linha é interessante. Diferente de algumas funções para abertura de arquivos, o File abre um arquivo e converte cada linha dele em um array, podendo ser acessado o valor como no exemplo a seguir: echo “$linha[0]“; que nos mostraria o primeiro valor da lista.

linha 6: while( $i <= $contador )

Como todos sabem, é o loop que tem o valor de “enquanto $i for menor que o $contador, continue fazendo”.

linha 7: {

Abre o corpo do loop while.

linha 8: if(file_exists($linha[$i]))

A função File_Exists verifica se aquela string com o nome de arquivos é real, ou seja, se o nome do arquivo passado REALMENTE nos leva a um arquivo real (realmente existe). Neste código, perceba que passei o valor $linha[$i] pois linha contém 6166 nomes de arquivos, mas o valor dachave de array $i nos leva ao valor inicial de $i, que é 0 (o que nos faz acessar o primeiro valor da lista, ou seja, o primeiro arquivo) e mais a frente recebe o operador de incremento para acrescentar 1 a variável i. o IF vale como: “Se o string de arquivo for realmente UM ARQUIVO, faça…”

linha 9: {

Este aí é o corpo do IF de verificação de existência do arquivo.

linha 10: echo “existe”;

Se o arquivo existir, exibir EXISTE.

linha 11: }

Fecha o corpo da condição real que exibe “existe”.

linha 12: else

Se não existir o arquivo, faça…

linha 13: {

Corpo de else.

linha 14: echo “nao existe”;

Exibir “não exite”;

linha 15: }

Fecha o corpo do “Não haver arquivo” em ELSE.

linha 16: em branco

linha 17: if(is_writable($linha[$i]))

Isso vale como “se o arquivo permitir escrita, o arquivo que você está me passando através de $linha[$i], eu farei algo…”.

linha 18: {

Abre o corpo do IF acima.

linha 19 e 20:  echo ‘ permite escrita’;
echo ‘</br>’;

Exibem as mensagens dentro das aspas simples.

linha 21: }

Fecha o corpo do if.

linha 22: echo “$linha[$i]“;

Exibe o nome do arquivo.

linha 23: //file_put_contents($linha[$i], $conteudo, FILE_APPEND);

Tem a mesma equivalência de abrir, colocar o conteúdo no fim e BOA!    ?:)

linha 24: $linha[$i] = trim($linha[$i]);

Esta linha é o trunfo, ela arranca os espaços (caso tenham) “acoplados” em seus arquivos (nos nomes deles) citados dentro de ver.txt. A função trim é que faz esta maravilha.

linha 25: $abrir = fopen($linha[$i], ‘a+’);

Esta variável contém a função que abre o arquivo e coloca o ponteiro no final.

linha 26: if(!$abrir)

Se der problema na função de abrir o arquivo (observe o caractere “!”) faça algo.

linhas do if:  {
echo “o arquivo $linha[$i] nao abre”;
exit();
}

Exiba que o arquivo não abra e PARE!

linhas finais: $writer = fwrite($abrir, $conteudo);

Abre o arquivo ($abrir) e ESCREVE o conteúdo de $conteudo dentro dele.

Final: fclose($abrir);
$i++;
}

?>

Fecha o arquivo que foi escrito,  acrescenta 1 ao valor de $i (que era zero), para que, ao prosseguir o loop vá editando os arquivos representados pelo array $linhas[$i]  que por sua vez NUNCA terão o mesmo valor pois $i sempre recebe 1 a cada inserção de RODAPÉ, até que chegue no valor 6166 do $contador. Por fim a tag de finalização do PHP.

Espero que seja útil para vocês.