Ir para conteúdo
Jefferson andre

fopen nao cria arquivo em C:

Recommended Posts

Boa tarde,
Estou com problemas ao utilizar o fopen, no localhost funciona corretamente mas ao subir para o site em vez de criar o arquivo em C:\nomedapasta ele cria na pasta que esta executando dentro do site.
 
Ja tentei colocar o caminho com duas barras mas mesmo assim nao esta funcionando. Segue o caminho que preciso criar o arquivo
C:\CFe\123456\Envio\nomedoarq.xml
 
ja tentei isso acima assim C:\\CFe\\123456\\Envio\\nomedoarq.xml e nada
 
estou usando o comando assim:
$destino = fopen($xdestino, 'w');
 
e entao vou colocando as escritas dentro dele com
fwrite($destino, "escrita");
 
O que fazer ? ou pra qual comando mudar para escrever um xml ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize dirname com a constante mágica __DIR__

 

dirname ( string $path [, int $levels = 1 ] ) : string

Primeiro parametro, é o diretorio, segundo é o nivel que deseja subir.

De um print no condigo e vá ajustando a sua necessidade. Depois declare em uma variavel e use na função.

echo dirname(__DIR__, 4);

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
8 horas atrás, Williams Duarte disse:

Utilize dirname com a constante mágica __DIR__

 


dirname ( string $path [, int $levels = 1 ] ) : string

Primeiro parametro, é o diretorio, segundo é a nivel que deseja subir.

De um print no condigo e vá ajustando a sua necessidade. Depois declare em uma variavel e use na função.


echo dirname(__DIR__, 4);

 

 

Subir niveis no site funciona e consigo salvar em qualquer pasta, mas preciso salvar em uma pasta especifica na unidade C:\ e esta parte nao funciona quando faço upload do site.

 

Localmente funciona numa boa.

 

Estou pensando em salvar em uma determinada pasta no site e criar uma rotina de download para salvar na pasta que eu quero na unidade C:\ mas nao sei se vai funcionar.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, Jefferson andre disse:

Subir niveis no site funciona e consigo salvar em qualquer pasta, mas preciso salvar em uma pasta especifica na unidade C:\ e esta parte nao funciona quando faço upload do site.

 

Localmente funciona numa boa.

 

Estou pensando em salvar em uma determinada pasta no site e criar uma rotina de download para salvar na pasta que eu quero na unidade C:\ mas nao sei se vai funcionar.

 

De devidas permissoẽs a pasta.

https://www.php.net/manual/pt_BR/function.chmod.php
 

chmod ("/arquivo/diretorio", 755);

Correto é os arquivos, ficar um nivel acima da public, desta forma você consegue criar uma rotina de backups, que faça até mesmo de seu sistema, se colocar em diretorios muitos especificos, começa a ter problemas.
 

Compartilhar este post


Link para o post
Compartilhar em outros sites
52 minutos atrás, Williams Duarte disse:

De devidas permissoẽs a pasta.

https://www.php.net/manual/pt_BR/function.chmod.php
 


chmod ("/arquivo/diretorio", 755);

Correto é os arquivos, ficar um nivel acima da public, desta forma você consegue criar uma rotina de backups, que faça até mesmo de seu sistema, se colocar em diretorios muitos especificos, começa a ter problemas.
 

Ok, sim a pasta onde crio o arquivo no site esta correto, mas o que eu preciso é gerar o mesmo arquivo no disco local.

 

infelizmente tudo o q estava funcionando no localhost parou ao subir para o site por causa de alguma permissao do php.ini ou talvez do apache

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue um exemplo que roda no localhost mas nao funciona na web

 

 

<?php
$destino =fopen("C:\\CFe\\teste_fopen.txt""w+");
fwrite($destino"Escreveu dentro");
fclose($destino);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já passei o exemplo acima!
 

18 horas atrás, Williams Duarte disse:

Utilize dirname com a constante mágica __DIR__

 


dirname ( string $path [, int $levels = 1 ] ) : string

Primeiro parametro, é o diretorio, segundo é o nivel que deseja subir.

De um print no condigo e vá ajustando a sua necessidade. Depois declare em uma variavel e use na função.


echo dirname(__DIR__, 4);

 

 


Isto já corrige para servidores distintos e de forma automática. Seja linux ou Windows. 

Compartilhar este post


Link para o post
Compartilhar em outros sites
11 horas atrás, Williams Duarte disse:

Já passei o exemplo acima!
 


Isto já corrige para servidores distintos e de forma automática. Seja linux ou Windows. 

Tentei usar a sua sugestão mas não consegui, fiz variações de sintaxe e mesmo assim só consegui salvar nas subpastas do site e nao em C:\

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por lucasseribeiro
      Olá fórum...
      Estou pedindo ajuda aos universitários!
       
      No terminal, com "php -a",  ele funciona bem... Estou usando o Manual do PHP:
      https://www.php.net/manual/pt_BR/function.fwrite.php
       
      Uso o primeiro exemplo das notas... Parece problema de permissões, mas tô boiando quanto onde  mexer nas permissões. No Apache2?! Nunca precisei mexer nos arquivos de configuração do Apache, sempre foi só gerar links simbólicos pelo terminal em /var/www/html, com os alvos dos links numa pasta "oficina" na minha pasta pessoal, e recarregar o navegador.
       
      Mas agora, criei um index.php geral com links para cada projeto, criei um arquivo que funciona como um "index.php individual do projeto" mas com outro nome com o HTML, e outro  com as funções PHP e, nele, uma função com as fopen() e fwrite() do primeiro exemplo das notas do Manual do PHP, sem parâmetros e echos sinalizando a execução.
       
      Chamei a função no index individual que dava include para o arquivo da função. Recarrego a página com F5 e os echos funcionam bem, mas os arquivos que deveriam ser criados não. Quando volto no arquivo das funções, o fopen() e o fwrite() estão rindo de mim!
       
      Já tentei com eles pelados, sem função, com path relativo no caminho do arquivo, aspas duplas, até um comentário antes fazendo //cuti cuti... Mas acabo de notar que estou fazendo os alvos dos links em /var, tentarem criar arquivos em /var, sem permissões de root...
       
      Vou manter o tópico em aberto por via das dúvidas, e se resolver marco como "resolvido" reportando aos demais usuários, para contribuir...
       
      Grato
      Lucas Ribeiro
    • Por heddyman
      pessoal bom dia,
       
       tenho esse algoritmo pra terminar e não consigo implementar o comando fopen (o nome do arquivo que criei é dados.txt)no meu código para não precisar ficar digitando as informações toda vez que precisar executar a função de pesquisa.. se houver mais algum problema no código ficarei grato se me orientarem.. podem me ajudar ??? 
      #include<stdio.h> #include<stdlib.h> #include<string.h> #define SIZE 200 // declaracao das funcoes void cadastro(); //cadastro void pesquisa();// pesquisa void liberarmem();// liberar a memória usada // variaveis globais int op; int c; typedef struct aluno { int ru; char nome[45]; char email[60]; struct aluno * proximo; // declaracao da estrutura da lista } t_cad; t_cad *ini_cad = NULL; // variavel global que ira armazenar o inicio da lista encadeada int main(int argc, char *argv[]) { printf(" ALGORITIMO DE LISTA ENCADEADA SIMPLES - Hedson Ferreira R.U. 2411288\n\n Analise e Desenvolvimento de Sistemas - Uninter 2019\n\n"); do { printf("*========================*\n"); printf("| Escolha uma opcao |\n"); printf("| 1. Cadastrar Aluno |\n"); printf("| 2. Pesquisar Aluno |\n"); printf("| 3. Sair |\n"); printf("*========================*\n"); scanf_s("%d", &op); switch (op) { case 1: cadastro(); break; case 2: pesquisa(); break; case 3: system("exit"); break; default: printf("Opcao Invalida..."); break; } } while (op != 3); void liberarmem(); return 0; } void cadastro() { int cont; int c; t_cad* prox_cad; if (ini_cad == NULL) { ini_cad = (t_cad*)malloc(sizeof(t_cad)); ini_cad->proximo = NULL; if (ini_cad == NULL) exit(1); } prox_cad = ini_cad; while (1) { printf("Digite o RU:"); scanf_s("%d", &prox_cad->ru); while ((c = getchar()) != '\n' && c != EOF); printf("Digite o Nome:"); gets_s(prox_cad->nome); while ((c = getchar()) != '\n' && c != EOF); printf("Digite o email:"); gets_s(prox_cad->email); while ((c = getchar()) != '\n' && c != EOF); printf("Deseja continuar??? (1)SIM e (0)NAO"); scanf_s("\n %d", &cont); while ((c = getchar()) != '\n' && c != EOF); if (cont == 0) break; prox_cad->proximo = (t_cad *)malloc(sizeof(t_cad)); prox_cad = prox_cad->proximo; prox_cad->proximo = NULL; } printf("\n"); } void pesquisa() { int ru_aux; char nome_aux[60]; t_cad* prox_cad; do { printf("\n Ecolha o parametro da pesquisa: \n1 RU \n2 Nome :\n0 para sair\n"); scanf_s("%d", &op); if (op == 0) break; prox_cad = ini_cad; switch (op) { case 1: printf("\n Digite o RU do Aluno:"); scanf_s("%d", &ru_aux); while ((c = getchar()) != '\n' && c != EOF); while (prox_cad != NULL) { if (prox_cad->ru == ru_aux) { printf("ru: %d\n nome:%s\n email:%s", prox_cad->ru, prox_cad->nome, prox_cad->email); break; } prox_cad = prox_cad->proximo; } break; case 2: printf("\n Digite o nome do Aluno:"); gets_s(nome_aux); while ((c = getchar()) != '\n' && c != EOF); while (prox_cad != NULL) { if (strcmp(prox_cad->nome, nome_aux) == 0) { printf("ru: %d\n nome:%s\n email:%s", prox_cad->ru, prox_cad->nome, prox_cad->email); break; } prox_cad = prox_cad->proximo; } break; default: printf("\n****opcao invalida*****"); break; } } while (1); } void liberarmem() { t_cad *prox_cad; while (ini_cad != NULL) { prox_cad = ini_cad; ini_cad = prox_cad->proximo; free(prox_cad); } }  
    • Por Augusto A.S
      Boa noite, sou novo aqui no fórum, estou tentando fazer um sistema de comentários para um site, e minha dúvida é a seguinte:
       
      Como faço para, através do "f" (fopen, fwrite...), escrever um conteúdo no meio de um arquivo html?
       
      O código que fiz escreve apenas no final do arquivo, o que causa problemas, pois o texto escrito se trata de uma tag <li></li> que deverá ser colocado dentro de uma tag <ul></ul>, a qual se localiza na tag <html></html>, no arquivo "comentario.html". Porém, no código que fiz, está escrevendo fora da tag <html></html>.
    • Por lucThony
      Ola, estou com um problema no meu codigo php na função fopen. Tenho 3 input de imagens, porem so o primeiro esta salvando o arquivo, os outros 2 não gravam. Segue:

      HTML
      </div> <div class="row 50%">                                          <input  name="arquivo" accept="image/*" capture="camera" onchange="document.getElementById('submitc').click();" type="file" /><br>                                                                                     </div> <div class="row 50%"> <input  name="arquivo2" accept="image/*" capture="camera" onchange="document.getElementById('submitc').click();" type="file"/><br> </div> <div class="row 50%">                                             <input  name="arquivo3" accept="image/*" capture="camera" onchange="document.getElementById('submitc').click();" type="file"/> </div> PHP
          $data = date('d-m-Y');     $data .= ' '.date('H:i:s');     $titulo="NOVA $nome";     $file_tmp_name    = $_FILES['arquivo']['tmp_name'];     $file_name        = $_FILES['arquivo']['name'];     $file_size        = $_FILES['arquivo']['size'];     $file_type        = $_FILES['arquivo']['type'];     $file_error       = $_FILES['arquivo']['error'];     $handle=fopen($file_tmp_name, "r");     $conteudo=fread($handle, $file_size);     fclose($handle);     $destiny=("PAINEL/$nome$condominio$data.png");     move_uploaded_file($file_tmp_name, $destiny);              $titulo2="NOVA $nome";     $file_tmp_name2    = $_FILES['arquivo2']['tmp_name2'];     $file_name2       = $_FILES['arquivo2']['name2'];     $file_size2        = $_FILES['arquivo2']['size2'];     $file_type2        = $_FILES['arquivo2']['type2'];     $file_error2       = $_FILES['arquivo2']['error2'];     $handle2=fopen($file_tmp_name2, "r");     $conteudo2=fread($handle2, $file_size2);     fclose($handle2);     $destiny2=("PAINEL/ARQ2/$nome$data$condominio.png");     move_uploaded_file($file_tmp_name2, $destiny2);          $titulo3="NOVA $nome";     $file_tmp_name3    = $_FILES['arquivo3']['tmp_name'];     $file_name3        = $_FILES['arquivo3']['name'];     $file_size3        = $_FILES['arquivo3']['size'];     $file_type3        = $_FILES['arquivo3']['type'];     $file_error3       = $_FILES['arquivo3']['error'];     $handle3=fopen($file_tmp_name3, "r");     $conteudo3=fread($handle, $file_size3);     fclose($handle3);     $destiny3=("PAINEL/ARQ3/$data$nome$condominio.png");     move_uploaded_file($file_tmp_name3, $destiny3);  
       
    • Por allan2
      Olá pessoal, estou tentando resolver esse problema faz dias e nada, já tentei mudar o proprietário e grupo da pasta, permissão 777, já tentei desativar o suEXEC, já fiz instalação lamp em 5 centos limpos pra ter certeza, tentei usar apache+php+mariadb em versões diferente e nada, no vertrigo e no xampp o site funciona sem erro!! apenas no httpd e nginx em linux nao funciona =(
      aqui esta o problema:
       
      Warning: fopen(data/tmp/ConfigServers.cache.php): failed to open stream: Permission denied in /var/www/html/lib/Flux.php on line 275 Critical Error An error was encountered during the lifetime of the application. This could be due to a variety of problems, such as a bug in the application. However, normally it is caused by misconfiguration. Exception Details Error: Flux_Error Message: Failed to write data/tmp/ConfigServers.cache.php permission error or data/tmp not exist in Flux::parseConfigFile() File: /var/www/html/lib/Flux.php:236 File Line Function/Method /var/www/html/lib/Flux.php 277 Flux::raise() /var/www/html/lib/Flux.php 336 Flux::parseConfigFile() /var/www/html/lib/Flux.php 121 Flux::parseServersConfigFile() /var/www/html/index.php 69 Flux::initialize() Exception Trace As String #0 /var/www/html/lib/Flux.php(277): Flux::raise('Failed to write...') #1 /var/www/html/lib/Flux.php(336): Flux::parseConfigFile('config/servers....') #2 /var/www/html/lib/Flux.php(121): Flux::parseServersConfigFile('config/servers....') #3 /var/www/html/index.php(69): Flux::initialize(Array) #4 {main} Parte do codigo do flux.php:
       
      public static function parseConfigFile($filename, $cache=true) { $basename = basename(str_replace(' ', '', ucwords(str_replace(array('/', '\\', '_'), ' ', $filename))), '.php').'.cache.php'; $cachefile = FLUX_DATA_DIR."/tmp/$basename"; if ($cache && file_exists($cachefile) && filemtime($cachefile) > filemtime($filename)) { return unserialize(file_get_contents($cachefile, null, null, 28)); } else { ob_start(); // Uses require, thus assumes the file returns an array. $config = require $filename; ob_end_clean(); // Cache config file. $cf = self::parseConfig($config); if ($cache) { $fp = fopen($cachefile, 'w'); // <<< LINHA 275 onde esta o erro if ( !$fp ){ self::raise("Failed to write ".$cachefile." permission error or data/tmp not exist in Flux::parseConfigFile()"); } fwrite($fp, '<?php exit("Forbidden."); ?>'); fwrite($fp, $s=serialize($cf), strlen($s)); fclose($fp); } return $cf; } }  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.