Ir para conteúdo
Fórum Script Brasil
  • 0

Como salvar o conteúdo de uma variavel para arquivo


johnsonsudre

Pergunta

Olá pessoal!

Estou caindo meio que de pára-quedas no universo PHP, portanto não sei nada ainda, e tenho a seguinte questão pra resolver:

Eu tenho uma variável num javascript cujo conteúdo (string) precisa ser gravado no servidor num arquivo que será criado se ele não existir ou sobrescrito se já existir, com nome e local pré-definido.

Por onde devo começar?

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Gratidão lowys , obtive sucesso quando envidi pouco dado, mas ao enviar um objeto json (uma grande string)  via ajax para gravar no servidor não obtive o mesmo resultado.
 

Criei duas funcoes JS que geram dois resultados diferentes, a primeira genScene() gera o volume de dado que preciso gravar num arquivo no servidor. A segunda, anyString() gera um volume bem pequeno de dado, ela foi criada só pra testar mesmo.

Quando envio os dados gerados pela segunda função tudo ocorre como esperado, os dados são enviados via ajax e recebidos no php perfeitamente. Mas quando uso a primeira função, que gera um volume de dados maior, nada ocorre!

Acho que tem a ver com a quantidade quantidade de dado passado. Tentei alguma variações no uso de GET e POST, mas ainda não consegui resolver.

Alguém sabe me dizer o que está acontecendo e onde estou errando?

Seguem os códigos

<?php
phpinfo();
$myFile = "meunovoarquivo.json";
$fh = fopen($myFile, 'w');
$stringData = $_POST["data"];
$stringData = json_encode($stringData);
fwrite($fh, $stringData);
fclose($fh);
echo "<script type='text/javascript'>alert('ok!');</script>";
?>	

<!DOCTYPE html>

<html>
	
	<head>
		<meta http-equiv="Content-Type" name="viewport=" content="width=device-width, initial-scale=1, text/html; charset=iso-8859-1">
		<script src="./public/js/vendor/jquery-2.2.1.js"></script>
		<script src="./public/js/vendor/three.js"></script>
		<script src="./public/js/vendor/OrbitControls.js"></script>
	</head>

	<body>
		<h3>Salvar JSON</h3>
		<a href="" onClick="save('returned.php')"><h1 type="button" style="background: #bbb">PHP</h1></a>
		<br>
		<div class="result">
			[HTML sera substituida em caso de sucesso.]
		</div>
		<canvas id="cena3d" style="background: #ccc"></canvas>
	</body>

	<script type="text/javascript">

		function genScene() {
			var output = Cena.toJSON();
			try {
				output = JSON.stringify( output, null, '\t' );
				output = output.replace( /[\n\t]+([\d\.e\-\[\]]+)/g, '$1' );
			} catch ( e ) {
				console.log("Erro: " + e);
				output = JSON.stringify( output );
			}
			console.log(output);
			return(output);
			//saveString( output, 'scene.json' );
		}

		function anyString() {
			var output = JSON.stringify(Cam["uuid"]);
			return(output);
		}

		function save(_php) {
			if (!_php) 
				{_php = 'returned.php';}
			_data = anyObject(); 
			// alert("php  : " + _php + "\ndata : " + _data);
			alert("php  : " + _php + "\ndata : " + _data);
			$.ajax
			({
				type: "POST",
				dataType : 'json',
				// async: false,
				url: _php,
				data: { 'data': _data },
				success: function () {alert("Sucesso!");},
				failure: function() {alert("Falha!");}
			});
		}

		/// ini three.js

		function iniThreeJS() {
			cena3d = document.getElementById('cena3d');
			render4d = new THREE.WebGLRenderer({canvas : cena3d});
			render4d.name = "Render4d"; 
			Cena = new THREE.Scene();
			Cena.name = "Cena4D";
			Cam = new THREE.PerspectiveCamera();
			Cam.name = "Camera"
			Cam.position.set(25,10,25); 
			Cam.lookAt (new THREE.Vector3 (0.0, 10.0, 0.0));
			grid = new THREE.GridHelper(100,10);
			grid.name = "Grid";
			Cena.add(grid);
			Cena.add(Cam);
		}

		function render() {
			$(document).ready(function() {
				requestAnimationFrame(render);
				render4d.render(Cena, Cam);
			});
		}

		iniThreeJS();
		render();

	</script>

</html>

 

Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

Verifique no seu php.ini o valor definido para max_post_size ou upload_max_filesize, o padrão parece ser 2M, tente aumentar um pouco e veja o resultado.

Se não tiver acesso ao seu php.ini, provavelmente poderá ser definido no arquivo .php assim:

ini_set('post_max_size', '50M');
ini_set('upload_max_filesize', '50M');
Link para o comentário
Compartilhar em outros sites

  • 0

Olá Wash, verifiquei usando a função phpinfo() e lá indica 8M para cada uma, isso é mais do que o suficiente pra atender o meu caso por enquanto.

Tentei redefinir para 50M usando sua segunda sugestão, através do comando ini_set() mas também não funfou...

 

continuo tentando...

Link para o comentário
Compartilhar em outros sites

  • 0

Adiciona estas duas linhas abaixo da linha que tem o json_encode, e veja qual o resultado (cole aqui no fórum para gente ver também). Pode ser que há algum problema na conversão para JSON.

var_dump(gettype($stringData));
var_dump($_POST["data"]);

 

Link para o comentário
Compartilhar em outros sites

  • 0

Com as alterações ficou assim.:

<?php

ini_set('post_max_size', '50M');
ini_set('upload_max_filesize', '50M');

$myFile = "meunovoarquivo.json";
$fh = fopen($myFile, 'w');
$stringData = $_POST["data"];
$stringData = json_encode($stringData);

var_dump(gettype($stringData));
var_dump($_POST["data"]);

fwrite($fh, $stringData);
fclose($fh);

echo "<script type='text/javascript'>$('.result')[0].innerText = " .  $stringData . ";</script>";

?>

No lado client não dá nenhum resultado também, e na tela fica assim:

Duvida.png

lowys, vou verificar o json_last_error() e digo o resultado depois

 

Link para o comentário
Compartilhar em outros sites

  • 0

Por ser uma requisição AJAX, o conteúdo do retorno (echo, var_dump, etc) você deve visualizar na aba Rede (veja a imagem).

PS.png

Na aba rede, clique na linha que contém o arquivo returned.php e depois na aba Resposta

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...