Posts Tagged ‘php’

PHP: Listando arquivos e pastas de um diretório

Monday, February 16th, 2009

Quando o assunto é manipulação de arquivos dentro de um servidor, muita coisa pode ser feita. Inclusive para os administradores, alguns scripts são realmente úteis, como o que vamos ver a seguir.

O script que vou apresentar, é uma forma prática de listar as pastas e arquivos de um diretório (diretório este, que deverá ser remoto, ou seja, online), mostrando visualmente o que é pasta, e o que é arquivo.
Facilidade esta, que pode ser adicionada à um script de download, envio por email, etc.

Vou trabalhar aqui, com algumas funções pouco utilizadas, ou melhor dizendo, pouco exploradas.
São elas:
getcwd: http://www.php.net/manual/pt_BR/function.getcwd.php
opendir: http://www.php.net/manual/pt_BR/function.opendir.php
readdir: http://www.php.net/manual/pt_BR/function.readdir.php
sort: http://www.php.net/manual/pt_BR/function.sort.php
is_dir: http://www.php.net/manual/pt_BR/function.is-dir.php

getcwd: obtém o diretório atual
opendir: abre o diretório informado no getcwd
readdir: lê o diretório abe rto

Então esta é a primeira parte:

<?php
// pega o endereço do diretório
$diretorio = getcwd();
// abre o diretório
$ponteiro  = opendir($diretorio);
// monta os vetores com os itens encontrados na pasta
while ($nome_itens = readdir($ponteiro)) {
    $itens[] = $nome_itens;
}

O que fizemos aqui, foi justamente, pegar o diretório, abri-lo e lê-lo.

Continuando, vamos usar:

sort: ordena os vetores (arrays), de acordo com os parâmetros informados. Aqui estou ordenando por pastas e depois arquivos

// ordena o vetor de itens
sort($itens);
// percorre o vetor para fazer a separacao entre arquivos e pastas 
foreach ($itens as $listar) {
// retira "./" e "../" para que retorne apenas pastas e arquivos
   if ($listar!="." && $listar!=".."){

// checa se o tipo de arquivo encontrado é uma pasta
   		if (is_dir($listar)) {
// caso VERDADEIRO adiciona o item à variável de pastas
			$pastas[]=$listar;
		} else{
// caso FALSO adiciona o item à variável de arquivos
			$arquivos[]=$listar;
		}
   }
}

Vimos acima, a expressão is_dir, indicando que as ações devem esntão ser executadas, ali mesmo, no diretório que já foi aberto e lido. As ações que executamos ali, foram: ver se tem pastas, listar. Ver se tem arquivos, listar.

Agora, se houverem pastas, serão apresentadas antes dos arquivos, em odem alfabética.
Se não houverem, serão apresentados apenas os arquivos, na mesma ordem.
E se houverem os dois, serão mostrados igualmente.

// lista as pastas se houverem
if ($pastas != "" ) {
foreach($pastas as $listar){
   print "Pasta: <a href='$listar'>$listar</a><br>";}
   }
// lista os arquivos se houverem
if ($arquivos != "") {
foreach($arquivos as $listar){
   print " Arquivo: <a href='$listar'>$listar</a><br>";}
   }
?>

Para ver este script funcionando, clique aqui: http://www.flaviajobs.com.br/sistemas/revistaphp/listadir.php

O que você pode fazer, para melhorar um código como este: adicionar links às pastas e arquivos, podendo então fazer download, ou enviar um deles por email, por exemplo.
Também poderá adicionar um contador, para saber quantos arquivos tem, quantas pastas também.
Ou ainda: calcular o espaço que os arquivos estão tomando neste diretório, utilizando conjugadamente as funções filesize (ler tamanho do artigo) e disk_total_space (ver tamanho total do diretório) – Ambas funções, abordarei em outro artigo.

Fonte: http://www.revistaphp.com.br/artigo.php?id=48

Hello world!

Monday, February 2nd, 2009

Esse termo Hello World é interessante, por que se observarmos o cidadão torna-se bem vindo ao mundo… rsrsrs, sem graça não é? Sim, mas faz sentido aqui em 2 situações:

Hello Nerd World and Hello Program World.

Seja bem vindo ao nosso site de How Tos e “contos de TI”.
Divirta-se ou aprenda algo interessante.

Prometemos How tos sobre Redes, PHP, Mysql, Postgres, Windows, BSD e Gnu/Linux, sem contar notícias sobre Apple, Sun, IBM e outros “monstrinhos” do mercado de TI, como Red Hat e a “pequenina” GOOGLE.

Obrigado por nos prestigiar.

Minhas URLs amigáveis pararam de funcionar depois que o cpanel atualizou ou meu apache foi atualizado

Thursday, January 8th, 2009

Como falei, nada de pânico… o little ajuda você (lol)… vamos ao que interessa.

Terreno

Se você teve um daqueles updates malditos que não justificam tantos problemas oriundos de tais feitos e o pior, ninguém entende por que o php está do mesmo jeito que antes, htacess intacto, a versão do apache manteve-se ou subiu e as diretivas do php.ini continuam as mesmas, e para completar o show de “bombas”, as urls amigáveis de seu site pararam como em um “toque de mágica”.

Ao combate

A única coisa que você vai habilitar e que o apache “fez o favor de desabilitar” é a funcionalidade multiviews, ele ajuda na interpretação de urls.

Um facebook grátis, opensource e de fácil utilização, tenha já o seu facebook!

Monday, December 22nd, 2008

Observei um pessoal em busca de um script no estilo Facebook, e não poderia deixar de compartilhar minha informação aqui. Para quem está afim de um sistema bem parecido com o facebook, opensource e grátis basta apenas acessar  o link abaixo:

http://www.elgg.org/index.php

A engenharia do sistema é bem interessante e faz o usuário sentir-se no Facebook mesmo!

Vale a pena conferir!

Adicione um Live Support Grátis, Opensource e de perfeito funcionamento

Monday, December 22nd, 2008

Gente, estive acessando o blog de uns mestres em aplicações web e fiquei muito feliz com uma iniciativa que avistei. Estou desenvolvendo um suite OpenSource para minha empresa e também para a comunidade e estava tentando entender bem o funcionamento dos chats online, mais precisamente os Live Supports da vida que precisava. Estava observando para preparar meus estudos e Justo agora descobri o sistema Open Web Messenger. Simplesmente maravilhoso, leve e funciona de verdade! Feito em PHP e com recursos bastante modernos, o sistema é perfeitamente elaborado.

Sua interface é limpa e muito amigável.

Se você quer um sistema de chat (live support) para seu site não deixe de acessar:

http://openwebim.org/

Obs: De bom que é será usado em meu projeto!

Fedora 10: Lamp2 – linux apache 2 mysql e php 5 + ruby + python

Monday, December 22nd, 2008

Vou mandar ver em um how to interessante para os amantes do LAMP sob fedora. Todos que usam Fedora devem (ou deveriam) saber que a versão atual deste fabuloso sistema encontra-se na 10. Iremos fazer um how to sobre lamp 2 no Fedora 10, então atente para estar usando Fedora 10.

Requisitos:

Internet (se rápida será melhor ainda),
Fedora 10,
Vontade de rodar o lamp2 no Fedora 10 ?:) ,
Estar logado como root.

Indo ao Combate

Após instalar seu Fedora acesse o console como root e execute os seguintes comandos:

yum update -y

Isso vai atualizar os repositórios e recursos do sistema (kernel, utilitários  e etc).

Após vamos instalar o mysql:

yum -y install mysql mysql-devel mysql-server

Isso vai instalar o mysql, mas logo após sua instalação aplique os comandos abaixo:

chkconfig –levels 235 mysqld on
/etc/init.d/mysqld start

Confirme se a porta já está ativa e esperando conexões:

netstat -tap | grep mysql

Isto deve gerar uma saída mais ou menos assim:

tcp        0      0 *:mysql                     *:*                         LISTEN      2407/mysqld

Após faça este ajuste aqui:

vi /etc/my.cnf

#skip-networking

Comentar a linha acima.

Reinicie o mysql com o comando:

/etc/init.d/mysqld restart

Pronto, defina a senha de root do mysql com os comandos abaixo:

mysqladmin -u root password Sua_nova_SENHA
mysqladmin -h maquina.meudominio.com -u root password Sua_nova_SENHA

Isso aplicará a senha de root do mysql.

Agora vamos aplicar php, python e ruby + apache 2:

yum -y install httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-eaccelerator php-magickwand php-magpierss php-mapserver php-mbstring php-mcrypt php-mhash php-mssql php-shout php-snmp php-soap php-tidy curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel

chkconfig –levels 235 httpd on

Pronto, depois disso faça o teste com —>

/etc/init.d/httpd start

Instale o ruby:

yum install httpd-devel ruby ruby-devel

cd /tmp
wget http://www.modruby.net/archive/mod_ruby-1.3.0.tar.gz
tar zxvf mod_ruby-1.3.0.tar.gz
cd mod_ruby-1.3.0/
./configure.rb –with-apr-includes=/usr/include/apr-1
make
make install

vi /etc/httpd/conf.d/ruby.conf

LoadModule ruby_module modules/mod_ruby.so

/etc/init.d/httpd restart

yum install mod_python

/etc/init.d/httpd restart

Prontooo!

O que há de novo no PHP 5.3?

Sunday, December 21st, 2008

Em alguns instantes os desenvolvedores PHP se perguntam:

O que há de novo no PHP 5.3?

Aqui está a resposta elaborada por parte da IBM em um overview interessante e dividido em 2 partes (até o momento):

http://www.ibm.com/developerworks/opensource/library/os-php-5.3new1/?ca=dgr-lnxw07PHPv5.3P1&S_TACT=105AGX59&S_CMP=GRsitelnxw01
http://www.ibm.com/developerworks/opensource/library/os-php-5.3new2/index.html?ca=dgr-lnxw01os-php-5.3new2&S_TACT=105AGX59&S_CMP=GRsitelnxw01

Fonte: www.tinews.org

Detecção de Intrusos em Aplicações WEB PHP com PHPIDS

Wednesday, December 17th, 2008

Detecção de Intrusos em Aplicações php com PHPIDS

A dica aqui vai para servidores que rodam com o apache e php5 (sob linux).
O PHPIDs é um sistema de detecção de instrusos, simples, rápido, bem estruturado e de fácil utilização. Isto cria mais uma camada de segurança para a sua aplicação web. Ele não vai filtrar entradas maliciosas, tampouco fazer maravilhas, como se estivesse com inteligência artificial, ele irá detectar o ataque e irá reagir segundo as suas configurações. O interessante é que ele tem o poder de decisão no momento de uma tentativa de invasão. Ele
pode servir para informar ao atacante que está tentando invadir de cuidade, alerta e etc, ou mesmo, notificar ao core de desenvolvimento da aplicação por email a tal tentativa de invasão.

Este how to é beta e nada aqui é GARANTIDO de funcionar, mas deve!

Requerimentos:

Os testes foram realizados na plataforma Gnu/Linux, no sabor Debian Etch, o qual teve ip

setado como 192.168.0.100, tendo por usuário e grupo de usuário do apache www-data.
Nos testes o diretório principal usado é um virtual host -> /var/www/web1/web

Por questões de segurança o diretório do PHPIDs será criado em outro lugar para evitar problemas com a estrutura, tornando-a mais difícil contra vulnerabilidade, no caso:

mkdir /var/www/web1/phpids

Criamos um diretório recursivo, evitando acesso público ao web, que deixaria o script vulnerável.

O arquivo que usamos neste tutorial é phpids-0.4.7.tar.gz, o qual temos apenas a necessidade de uso diretório lib.

cd /tmp
wget http://php-ids.org/files/phpids-0.4.7.tar.gz
tar xvfz phpids-0.4.7.tar.gz
cd phpids-0.4.7
mv lib/ /var/www/web1/phpids/

Agora mudamos o diretório para /var/www/web1/phpids/lib/IDS:

cd /var/www/web1/phpids/lib/IDS

Agora iremos fazer com que o /tmp permita escrita para o usuário do apache (log do phpids necessitará):

chown -R www-data:www-data tmp/

Agora vamos configurar o PHPIDs em seu arquivo de configuração:

cd Config/
vi Config.ini

As configurações são padrão, todavia iremos alterar o caminho de onde estão os arquivos, sendo o ajuste final idêntico a isto aqui:

; PHPIDS Config.ini

; General configuration settings

; !!!DO NOT PLACE THIS FILE INSIDE THE WEB-ROOT IF DATABASE CONNECTION DATA WAS ADDED!!!

[General]

filter_type     = xml
filter_path     = /var/www/web1/phpids/lib/IDS/default_filter.xml
tmp_path        = /var/www/web1/phpids/lib/IDS/tmp
scan_keys       = false

exceptions[]    = __utmz
exceptions[]    = __utmc

; If you use the PHPIDS logger you can define specific configuration here

[Logging]

; file logging
path            = /var/www/web1/phpids/lib/IDS/tmp/phpids_log.txt

; email logging

; note that enabling safemode you can prevent spam attempts,
; see documentation
recipients[]    = test@test.com.invalid
subject         = “PHPIDS detected an intrusion attempt!”
header                      = “From: <PHPIDS> info@php-ids.org”
safemode        = true
allowed_rate    = 15

; database logging

wrapper         = “mysql:host=localhost;port=3306;dbname=phpids”
user            = phpids_user
password        = 123456
table           = intrusions

; If you would like to use other methods than file caching you can configure them here

[Caching]

; caching:      session|file|database|memcached|none
caching         = file
expiration_time = 600

; file cache
path            = /var/www/web1/phpids/lib/IDS/tmp/default_filter.cache

; database cache
wrapper         = “mysql:host=localhost;port=3306;dbname=phpids”
user            = phpids_user
password        = 123456
table           = cache

; memcached
;host           = localhost
;port           = 11211
;key_prefix     = PHPIDS
;tmp_path       = /var/www/web1/phpids/lib/IDS/tmp/memcache.timestamp

Pronto, terminado.

Usando o PHPIDs

Nós iremos criar o arquivo que vai fazer a chamada do PHPIDs (depois iremos ajustar o arquivo para chamar automaticamente os recursos do PHPIDs para todas as contas do servidor):

<?php
set_include_path(
get_include_path()
. PATH_SEPARATOR
. ‘/var/www/web1/phpids/lib’
);

require_once ‘IDS/Init.php’;
$request = array(
‘REQUEST’ => $_REQUEST,
‘GET’ => $_GET,
‘POST’ => $_POST,
‘COOKIE’ => $_COOKIE
);
$init = IDS_Init::init(‘/var/www/web1/phpids/lib/IDS/Config/Config.ini’);
$ids = new IDS_Monitor($request, $init);
$result = $ids->run();

if (!$result->isEmpty()) {
// Take a look at the result object
echo $result;
require_once ‘IDS/Log/File.php’;
require_once ‘IDS/Log/Composite.php’;

$compositeLog = new IDS_Log_Composite();
$compositeLog->addLogger(IDS_Log_File::getInstance($init));
$compositeLog->execute($result);
}
?>

Se você chamar o arquivo no browser, perceberá que o mesmo ficará em branco, no caso http://192.168.0.100/phpids.php – porém, mas se você tentar usar um suposto ataque, nosso amigo PHPIDs vai entrar em ação, use o exemplo -> http://192.168.0.100/phpids.php?test=%22%3EXXX%3Cscript%3Ealert(1)%3C/script%3E

Pronto, agora iremos ver o caminho para que os scripts usem o PHPIDs, e o interessante aqui, você não precisará alterar todos os seus scripts, isto por que iremos chamar o script automaticamente como recurso do PHP, isto carregará o mesmo “como se fosse um módulo”, e o parâmetro que define isto bacaninha é -> auto_prepend_file, iremos apontar o arquivo no php.ini principal do servidor, isso dará força e velocidade no desenvolvimento usando tal recurso. Isto também pode ser feito em um arquivo .htaccess, desde que apontemos tudo corretamente, haverá de funcionar turbinado.

NO CASO DO PHP.INI

vi /etc/php5/apache2/php.ini

procure pela linha auto_prepend_file, se não achar, insira no meio do arquivo aberto:

auto_prepend_file = /var/www/web1/web/phpids.php

Reinicie o Apache:

/etc/init.d/apache2 restart

NO CASO DO ARQUIVO .HTACCESS

vi /var/www/web1/web/.htaccess

php_value auto_prepend_file /var/www/web1/web/phpids.php

Verifique os confs de vhost, se estão assim:

<Directory /var/www/web1/web/>
AllowOverride All
</Directory>

Caso sim, caso tenha mudado algo no apache e retorne para este padrão acima, reinicie o apache.

Crie um simples arquivo ->

vi /var/www/web1/web/info.php
dentro dele:

<?php
phpinfo();
?>

Faça um acesso simples -> http://192.168.0.100/info.php

Agora, para ver o PHPIDs em ação use http://192.168.0.100/info.php?test=%22%3EXXX%3Cscript%3Ealert(1)%3C/script%3E

Se as mensagens de alerta forem vistas é por que o script de /var/www/web1/web/phpids.php foi chamado automaticamente de dentro de /var/www/web1/web/info.php.

Sobre os logs

Podem ser vistos em /var/www/web1/phpids/lib/IDS/tmp/phpids_log.txt, para ver rapidamente o teste use:

cat /var/www/web1/phpids/lib/IDS/tmp/phpids_log.txt

Algo parecido com os termos abaixo será exibido:

“192.168.0.77″,2008-06-04T17:36:08+02:00,54,”xss csrf id rfe

lfi”,”REQUEST.test=%5C%22%3EXXX%3Cscript%3Ealert%281%29%3C%2Fscript%3E GET.test=%5C%22%3EXXX%3Cscript%3Ealert%281%29%3C%2Fscript%3E”,”%2Finfo.php%3Ftest%3D%2522%253EXXX%253Cscript%253Ealert%281%29%253C%2Fscript%253E”

Isso é bom para quem quer analisar tipos de ataques e quer reaplicar mudanças valiosas na segurança.

Vamos fazer uma mudança no nível de segurança para que seja exibida informação, caso esteja vazio o ataque, prossiga, do contrário será parado o script!

vi /var/www/web1/web/phpids.php

<?php
set_include_path(
get_include_path()
. PATH_SEPARATOR
. ‘/var/www/web1/phpids/lib’
);

require_once ‘IDS/Init.php’;
$request = array(
‘REQUEST’ => $_REQUEST,
‘GET’ => $_GET,
‘POST’ => $_POST,
‘COOKIE’ => $_COOKIE
);
$init = IDS_Init::init(‘/var/www/web1/phpids/lib/IDS/Config/Config.ini’);
$ids = new IDS_Monitor($request, $init);
$result = $ids->run();

if (!$result->isEmpty()) {
// Take a look at the result object
echo $result;
require_once ‘IDS/Log/File.php’;
require_once ‘IDS/Log/Composite.php’;

$compositeLog = new IDS_Log_Composite();
$compositeLog->addLogger(IDS_Log_File::getInstance($init));
$compositeLog->execute($result);

die(‘<h1>Go away!</h1>’);
}
?>

fonte:

http://www.howtoforge.com/intrusion-detection-for-php-applications-with-phpids

PHP 5.2.8 – Eu hein!

Friday, December 12th, 2008

Caramba, os caras do PHP estão mais rápidos que o super-herói The Flash, já lançaram a versão 5.2.8, que na realidade não passa de um pacth rápido da versão 5.2.7.

Para conferir o lançamento “flash”, acessem:

http://www.php.net/archive/2008.php#id2008-12-08-1

Instalando php mais novo em servidores CentOs, Red Hat ou Fedora

Monday, December 8th, 2008

É comum que tenhamos um servidor feito sem recursos de painéis de controle como Plesk ou Cpanel que tornam a versão do php muito antiga… porém, em observação, precisava de uma versão tunada do php para poder programar feliz e contente!

O Centos Veio com a versão 5.1.6, que nada tinha de tão importante (o que precisava), então, abaixo segue how to para subir para uma versão 5.2.x:

wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-2.noarch.rpm
wget http://rpms.famillecollet.com/el5.i386/remi-release-5-4.el5.remi.noarch.rpm
rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

yum --enablerepo=remi update php

pronto, depois disso só precisa verificar:

php -v

PHP 5.2.6 (cli) (built: May  7 2008 00:50:43)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies

Evento de PHP – PHPPB – assista ao vivo!@

Saturday, November 29th, 2008

http://www.php-pb.net/

Abração a todos!

Desabilitando Funções do PHP em servidores!

Tuesday, October 21st, 2008

Algumas funções do Php precisam ser desabilitadas em servidores web compartilhados. Altere os mesmos em:

/usr/lib/php.ini
Se o Zend foi compilado, o caminho pode ser:
/usr/local/Zend/etc/php.ini

Lozalize a linha: disable_functions = e digite as funções:

xec, system, passthru, shell_exec, escapeshellarg, escapeshellcmd, proc_close, proc_open, dl, popen

Ou, mais completo:

dl, system, exec, shell_exec, chown, chgrp, escapeshellcmd, putenv, popen, pclose, passthru, proc_open, proc_get_status, proc_nice, proc_close, proc_terminate, posix_ctermid, posix_get_last_error, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix_getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_strerror, posix_times, posix_ttyname, posix_uname

FONTE: http://www.forumcpanel.com.br/index.php?showtopic=368&pid=2002&mode=threaded&start=#entry2002

Alterando Timezone de sua aplicação PHP

Monday, October 13th, 2008

As vezes nos perguntamos:
Como alterar o timezone de uma aplicação PHP?

Simples, no script que você deseja mudar use:

putenv(“TZ=America/Sao_Paulo”);

Para mais timezones acesse:

http://www.theprojects.org/dev/zone.txt

Obs -> Só roda bem se o safe_mode estiver ON e ele estará REMOVIDO do php6!

Instalação do Subversion no Ubuntu (sem frescuras!)

Sunday, September 21st, 2008

Estava me organizando para uma séria de projetos, nada mais justo que falar para você mesmo que você precisa ser justo com a administração de seu tempo. Estou em um domingo, descansando e disposto a dar mastigadinho (outra vez) o esquema para você:

 

Arena – ou campo de batalha

  1. Instalar o Ubuntu Server sem selecionar as opções de LAMP ou DNS Server (se desejar instalar o lamp agora siga o how to no link -> http://littleoak.wordpress.com/2008/07/04/ubuntu-804-apache2-php5-mysql5-phpmyadmin-lamp2-no-ubuntu-804/
  2. No meu caso, que tem um HD de 10GB, dividi as partições de maneira default (assistido e usar disco inteiro). Instalar o Apache e o SVN:
    • sudo apt-get install apache2 subversion libapache2-svn
  3. Criar o diretório onde ficarão os repositórios do SVN:
    • sudo mkdir /srv/svn
  4. Criar o repositório. Aqui seria um bom momento para restaurar o backup, quando for o caso:
    • sudo svnadmin create /srv/svn/{repositorio}
  5. Dar acesso ao Apache para esses diretórios:
    • sudo chown -R www-data:www-data /srv/svn
  6. Configurar o módulo webdav do subversion
    1. sudo vi /etc/apache2/mods-enabled/dav_svn.conf
    2. Descomentar a tag <Location /svn>. No início e no fim do arquivo.
    3. Descomentar a opção DAV svn
    4. Descomentar a opção SVNParentPath /var/lib/svn e mudar o caminho para a localização do repositório: /srv/svn. Foi escolhido essa ao invés da SVNPath para termos mais de um repositório nesta mesma pasta.
    5. Descomentar a opção AuthzSVNAccessFile /etc/apache2/dav_svn.authz. Para habilitar o controle de acesso aos projetos usando o arquivo informado. Mais informação sobre como criar o arquivo podem ser vistas no livro vermelho do Subversion, na seção Per-Directory Access Control. Infelizmente a versão em português ainda não foi traduzida.
    6. Descomentar, para habilitar a autenticação, as três linhas:
      1. AuthType Basic
      2. AuthName “Subversion Repository”
      3. AuthUserFile /etc/apache2/dav_svn.passwd
      4. Adicione a linha: Require valid-user
      5. Descomente a última informação de </Location>
      6. Salve o arquivo. Para isso, aperte a tecla ESC digite “:wq” sem as aspas e pressione enter
  7. Crie um usuário para acessr o SVN:
    • sudo htpasswd -cm /etc/apache2/dav_svn.passwd <username>
    • O parâmetro -c só é necessário para o primeiro usuário, pois é usado para criar o arquivo. Para os seguintes apenas o -m resolve, que é usado para criptografar a senha com o MD5.
  8. Reiniciar o apache
    • sudo /etc/init.d/apache2 restart

Fedora 9: Apache 2 PHP 5 Mysql 5 phpmyadmin – lamp2

Saturday, August 23rd, 2008

Terreno

Necessidade de instalação do LAMP2 em meu PC. Ter uma internet bacana, ou “bacaninha”.

Partindo para cima

Primeiros passos (creio que você já atulizou seu fedora 9 sempre devem ser checagens simples. Rode os comandos abaixo como root:

yum -y install httpd php mysql mysql-server php-mysql

Esse comando aí instala o apache 2.2.8, php 5.2.5 e mysql 5.0.51a e já integra os serviços entre si.

Para fazer com que os serviços rodem automaticamente, usemos os comandos abaixo:

/sbin/chkconfig httpd on
/sbin/chkconfig –add mysqld
/sbin/chkconfig mysqld on
Para startar os serviços use os comandos:

/sbin/service httpd start
/sbin/service mysqld start

Para ajustar o password do mysql use o comando:

mysqladmin -u root password ‘new-password’
Para “adicionar” alguma segurança ao mysql, use:

mysql -u root -p
mysql> DROP DATABASE test;
mysql> DELETE FROM mysql.user WHERE user = ”;
mysql> FLUSH PRIVILEGES;

Para ver se rodou legal, vá em /var/www/html/ e crie um arquivo index.php e coloque o conteúdo abaixo dentro dele:

<?php
phpinfo();
?>

Para testar, abra o firefox e coloque o endereço –> http://localhost/
Se for exibida a diretiva completa do php.ini, MARAVILHA, se não, volte para o início deste tutorial.
Agora o mr PHPMYAdmin, para ajusta-lo use o comando abaixo:

yum install phpmyadmin
Feito isso, copie o diretório da forma que eu farei:

cp -r /usr/share/phpMyAdmin/ /var/www/html/

Pronto, o phpmyadmin pode ser acessado da seguinte forma em seu Firefox (eu espero que seja ele):

http://localhost/phpMyAdmin/

Espero ter ajudado e algo, talvez possa ser útil.

Combatendo envio de spam em scripts PHP

Tuesday, August 12th, 2008

Insira sempre o código abaixo no início de seus scripts com forms:

// Proteção contra injeção de SPAM
foreach ($_POST as $j =>$value) {
if (stristr($value,”Content-Type”)) {
header(“HTTP/1.0 403 Forbidden”);
exit;
}
}

Este também:

// Mais uma proteção contra SPAM
if ( preg_match( “/bcc:|Content-Type:/i”, implode( $_POST ) ) ){ exit; }


Também valide entradas de email com expressão regular:

// Verificando se o email é válido
if  (!eregi(“^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$”, $_POST['email'])) {
die(“email inválido”);
}

É isso!

Encontrar um determinado dia da semana com PHP

Wednesday, July 2nd, 2008

função que faça descobrir o primeiro determinado  dia da semana de um determinado mês:

$dia = “Friday”;
$mes = 12;
$ano = 2008;
$firstDay = date(‘d.m.Y’,strtotime(“first $dia”,mktime(0,0,0,$mes,
1,$ano)));

php.ini que o cpanel usa para o RvSiteBuilder

Saturday, May 31st, 2008

vim /usr/local/cpanel/3rdparty/etc/php.ini

para corrigir os paus do rvsitebuilder, basta localizar as linhas abaixo:

upload_max_filesize — modifique o valor para 105M

max_execution_time — modifique para 180

post_max_size — modifique para 100M ou maior

Isto vai ajustar o problema no mantimento do rvsitebuilder.

Cannot send session cookie – headers already sent by – PARTE 2

Tuesday, March 18th, 2008

Se você recebeu esta mensagem e não sabe como proceder, uma das saídas e colocar no início de seu código:

ob_ start();

Isso vai “segurar” o buffer de saída, impedindo o problema!
:)

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.