Ir para conteúdo
lucasseribeiro

Função fopen() fica rindo de mim e não funciona!

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

A questão das permissões é nos arquivos no servidor que você deseja editar, pode definir permissão de leitura(4), gravação(2) e execução(1), normalmente clicando botão direito vai ter uma opção para alterar permissões ou em propriedades. Se for criar um arquivo do zero através do php também tem que configurar as permissões na hora da montagem.

 

valww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deve dar permissão ao usuário apache de leitura e escrita na pasta do seu projeto.

 

Quando você executa vai terminal, o usuário que está executando é o seu. Via browser, é o servidor, que é apache.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Peguei de novo só agora...

 

Quero reiterar que os arquivos do projeto estão na minha pasta pessoal. Eles tem links em /var/www/html... Tentei apenas permissionar os arquivos do projeto, não deu. Agora vou definir o proprietário... Depois vou ver o lado das permissões no usuário apache, conforme observação de Gabriel Heming.

 

Grato, minha gente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Minha gente...

 

Não encontro um usuário apache! Seria o mesmo do navegador? Se for, acho que é o meu mesmo...

Quanto ao código, marcosmarcolin, é o básico...

<?php $fp = fopen('data.txt', 'w');
fwrite($fp, '1'); 
fwrite($fp, '23');
fclose($fp); ?>

Eu abri o arquivo e estava testando as funções para me certificar de que estava tudo certo... E não estava. Estou seriamente inclinado a usar cópias ao invés de links, mas vou fazer mais umas tentativas e postarei progressos. Grato

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fórum,

 

fiquei até meio sem graça... Devia ter executado meus arquivos pelo shell, saberia o problema na mesma hora. Fui modificando com o tempo, e coloquei até echos indicando "antes" e "depois" da execução do script...

function arquivo() {
	
	echo "antes ";

	$fp = fopen( 'dados', 'a' );
	fwrite( $fp, 'om mani '   );
	fwrite( $fp, 'padme hum'  );
	fclose( $fp );

	echo " depois"; }

Então, executei o php pelo shell onde estavam os arquivos e o do erro

php /var/www/html/cap/cap.php

"cap.php" contém a chamada para a função arquivo() do script cap_n.php

antes

PHP Warning:  fopen(dados): failed to open stream: 
No such file or directory in /home/lucasribeiro/Sistemas/oficina/software/LR/cap/cap_n.php on line 49

PHP Warning:  fwrite() expects parameter 1 to be resource, boolean given in 
/home/lucasribeiro/Sistemas/oficina/software/LR/cap/cap_n.php on line 50

PHP Warning:  fwrite() expects parameter 1 to be resource, boolean given in
/home/lucasribeiro/Sistemas/oficina/software/LR/cap/cap_n.php on line 51

PHP Warning:  fclose() expects parameter 1 to be resource, boolean given in
/home/lucasribeiro/Sistemas/oficina/software/LR/cap/cap_n.php on line 52

depois

Separei as linhas dos avisos para ficar mais claro...

Alguém pode me ajudar? Estou estudando a seguinte questão postada no stackoverflow onde é dito para o usuário definir variáveis como root_path:

https://pt.stackoverflow.com/questions/180845/erro-failed-to-open-stream-no-such-file-or-directory

 

Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

O primeiro warning é o que gera os demais problemas.

 

Basicamente o script não localiza o arquivo. Valide o path que está sendo utilizado. Lembrando que Linux é case sensitive.

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 Jefferson andre
      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 ?
    • Por Fábio BN
      Olá.

      Tenho um POST que funciona em todos navegadores de PC, menos em Iphone e num navegador padrão que vem Android, onde será que errei?
       
      <script type="text/javascript" src="../../js/jquery-1.11.1.min.js"></script> <script type="text/javascript" src="../../js/jquery.mask.min.js"></script> <script type="text/javascript" src="../../js/bootstrap.min.js"></script> <script> <script> function enviaPagseguro(){ $.post("pedido_pag_seguro.php",'',function(data){ $('#code').val(data); $('#comprar').submit(); }) } </script> <form id="comprar" action="https://pagseguro.uol.com.br/checkout/v2/payment.html" method="post" onsubmit="PagSeguroLightbox(this); return false;"> <input type="hidden" name="code" id="code" value="" /> <input type="hidden" name="pedido" id="pedido" value="<?php echo $tudo1['codigo_user']; ?>" /> <?php $_SESSION['user_comprador'] = $tudo1['codigo_user_temp']; ?> <?php $_SESSION['valor_pedido'] = number_format($total_geral, 2, ',', '.'); ?> <input type="hidden" name="valor_pedido" id="valor_pedido" value="<?php echo number_format($total_geral, 2, ',', '.'); ?>" /> <div name="submit" align="center" onclick="enviaPagseguro()" class="pag_seguro"> <div align="center"><img src="../../imagens/loja_virtual/boleto_grande.gif" class="img-responsive padding_bottom5"></div> <div align="center"><img src="../../imagens/loja_virtual/logos_pag_seguro.gif" class="img-responsive"></div> </div> </form> <script type="text/javascript" src="https://stc.pagseguro.uol.com.br/pagseguro/api/v2/checkout/pagseguro.lightbox.js"></script> Obrigado!
    • 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 DinhoPHP
      Olá!
      Estou com um problema jamais visto antes e nunca pensei que se tornaria um algum dia. Estou desenvolvendo um site, porém no arquivo index.php, ao ser enviado para o servidor da Hostgator, tudo que está em uma tag PHP em diante é ignorado, inclusive tags HTML5. No arquivo, há tags PHP antes dessa e são interpretadas tanto no XAMPP quanto na Hostgator, já a "tag problemática", funciona normal no XAMPP, porém não Hostgator. Segue o código, marquei o trecho ignorado pelo servidor, com uma linha de comentário em HTML5.
       
      index.php
      <!DOCTYPE html> <html lang="pt-br"> <head> <title>Royal Poker</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- ESTILO CSS DO PROGRAMADOR --> <link rel="stylesheet" href="_css/estilo_adicional.css"> <!-- DEPENDÊNCIAS DO BOOTSTRAP ONLINE DE ESTILO --> <!--<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">--> <!-- DEPENDÊNCIAS OFFLINE --> <link rel="stylesheet" href="node_modules/bootstrap/compiler/bootstrap.css"> <link rel="stylesheet" href="_css/main.css"> </head> <body> <div class="container-fluid fixed-top" style="z-index: 9999;"> <ul id="estados" class="navbar-nav fixed-top justify-content-start flex-row" style="background-color: #b4954f; font-size: 12px;"> <li> <a href="http://www.h2club.com.br" target="_self" class="navigation-link atual"> SÃO PAULO </a> </li> <li> | </li> <li> <a href="http://campinas.h2club.com.br" target="_self" class="navigation-link "> CAMPINAS </a> </li> <li> | </li> <li> <a href="http://curitiba.h2club.com.br" target="_self" class="navigation-link "> CURITIBA </a> </li> </ul> </div> <?php require_once"_include/menu_top.php";?> <div class="content-fluid" style="margin-top: 6rem;"> <?php require_once"_include/slide_top.php"; ?> </div> <div class="content-fluid text-uppercase text-center" style="margin-top: 6rem;"> <img src="_imagens/logo-rewards-meio.png" class="img-fluid" alt=""> <h2>PROGRAMA DE RECOMPENSAS DO H2 CLUB</h2> <h4>Acumule pontos enquanto joga Poker e troque por muitos prêmios e benefícios</h4> </div> <div class="flex-column w-100 justify-content-center text-uppercase text-justify"> <?php require_once"_include/opcoes_meio.php"; ?> </div> <div class="content-fluid justify-content-center"> <img src="_imagens/banner_meio.jpg" class="img-fluid" alt=""> <!-- TUDO É IGNORADO PELA HOSTGATOR E NÃO NO XAMPP --> <?php require_once"_include/calendario.php"; ?> </div> <?php require_once"_include/calendario.php"; ?> <?php require_once"_include/footer.php"; ?> <!-- DEPENDÊNCIAS DO BOOTSTRAP ONLINE NESSA ORDEM E AQUI NO FIM DO BODY --> <!--<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>--> <!-- DEPENDÊNCIAS DO BOOTSTRAP OFFLINE NESSA ORDEM E AQUI NO FIM DO BODY --> <script src="_jquery/jquery-3.3.1.slim.min.js"></script> <script src="_bootstrap4_1_3/popper.js/dist/umd/popper.min.js"></script> <script src="_bootstrap4_1_3/_js/bootstrap.min.js"></script> <script> $(document).ready(function(){ $('[data-toggle="popover"]').popover(); }); </script> </body> </html>  
    • 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>.
×

Informação importante

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