Jump to content
Fórum Script Brasil
  • 0

Como salvar o conteúdo de uma variavel para arquivo


johnsonsudre
 Share

Question

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 to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...