Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde a todos, acho que essa pergunta vai parecer um pouco estranha a todos mas vamo lá.
Tenho um sisteme de upload de arquivos que não está funcionando como deveria, eu faço o upload de um arquivo e movo ele para uma pasta da minha aplicação, até aqui td certo, o problema é que após fazer o upload eu preciso ler oq tem dentro desse arquivo (pode ser xml, txt...) só que ele simplesmente não le o arquivo....
Fiz vários teste e um deles foi o seguinte: rodei o script que vai ler o arquivo de upload só que no lugar do arquivo de upload coloquei um fixo (dentro da mesma pasta e com o caminho do arquivo), li o arquivo e funcionou perfeitamente.
O servidor que estou usando é o IIS, não sei se pode ter algo a ver... sempre usei apache e em outros lugares onde uso a mesma aplicação de upload e leitura de arquivo tudo funciona corretamente....
Alguém já teve algum problema parecido?
posta o codigo...perceba q o xml tem uma estrutura diferente do txt, e portanto precisara de mais de um codigo pra ler cada tipo de arquivo...
então o código de linha de comando é este
pclose(popen('start /B php -c c:/Windows site/importador.php '.$file, 'r'));
para ler o xml uso o simplexml_load_file.
Fiz alguns outros testes em outros diretorios e acontece a mesma coisa, leio o arquivo e quando vou escrever, nada acontece... apenas é criado o arquivo e nada dentro
>
então o código de linha de comando é este
pclose(popen('start /B php -c c:/Windows site/importador.php '.$file, 'r'));
para ler o xml uso o simplexml_load_file.
Fiz alguns outros testes em outros diretorios e acontece a mesma coisa, leio o arquivo e quando vou escrever, nada acontece... apenas é criado o arquivo e nada dentro
posta o codigo...posta o codigo...posta o codigo todo...kd o do upload...da onde saiu pclose e popen...?
upload
if (isset($_FILES['file'])){
$nome = str_replace("\\","",$_FILES['file']['name']);
$file = 'c:/temp/' . $nome;
if (@move_uploaded_file($_FILES['file']['tmp_name'], $file)) {
$conteudo = file_get_contents($file);
// Retorna o md5 indicando se o arquivo foi recebido ok ou não
echo result(0,md5($conteudo));
flush();
// Somente importa se não for sábado nem domingo
// Executa a importação
background_import($nome);
} else {
echo result(3, 'Erro ao tentar copiar o arquivo para seu destino.');
}
function background_import
function background_import($file) {
global $conexao;
$pid = -1; // Simula um número de processo
// Se existe a função, abre um novo processo
if (function_exists('pcntl_fork')) $pid = pcntl_fork();
if($pid == -1) { // Se deu erro ao abrir o processo ou não existe a função, tenta executar a importação via linha de comando
// Se não contiver "win" no sistema operacional, executa um comando linux
if (strpos(strtolower(PHP_OS),"win") === false) {
exec('nohup php -c ' . getPathIni() . ' ' . $xml_config->config->caminho_fontes . '/importador/importador.php '.$file.' > /dev/null &');
} else { // Se contiver "win", executa um comando windows
pclose(popen('start /B php -c ' . getPathIni() . ' ' . 'site/importador/importador.php '.$file, 'r'));
}
} elseif ($pid == 0) { // Se executou o processo filho, chama o importador nesse processo
include($xml_config->config->caminho_fontes . '/importador/importador.php');
}
}
treco do importador que interessa
if (!isset($file) && @!$file = $argv[1]) {
$fp = fopen('log_'.date("dmY").'.log',"w+");
fwrite($fp, "Nome do arquivo XML no recebido.");
fclose($fp);
exit;
}
// Abre o arquivo de dados
$fp = fopen('C:/tmp/'.$file,'r');
$texto = fread($fp,filesize($fp));
fclose($fp);
$fp = fopen('C:/tmp/ler.txt','w+');
fwrite($fp,$texto.'aaaa');
fclose($fp);
exit;
ali coloquei um 'aaaaa' só para ter certeza que o script consegue escrever ago dentro do ler.php
sera q eh aki?
upload
$file = 'c:/temp/' . $nome;
importador
$fp = fopen('C:/tmp/'.$file,'r');
perceba q setou diretorios diferentes, e pior mandou para o temporario, nao use o temporario, nunca se sabe quando o SO vai limpar akele diretorio...
Não sei se muda alguma coisa, mas o upload é feito por linha de comando
pclose(popen('start /B php -c...
o arquivo chega a pasta e o script php que deveira ler ele também é chamado, chega na hora de ler o que tem "dentro" do arquivo não está acontecendo nada