0

jquery $.post() を使用して PHP スクリプトに情報を渡し、その情報をテキスト ファイルに書き込もうとしています。投稿はうまく機能しています。私が知る限り、エラーはスローされません...しかし、ファイルは作成されず、ファイルをそこに置いても書き込まれません。何か不足していますか?これが私のコードです。

JavaScript

  var ajaxData = { IGC: JSON.stringify(containerObj), filename: newFilePath };
  $.post( "../php/generateIGC.php", ajaxData, function(data) {
        $('#generated_textarea').val(data)
  })

もともと、送信されているものを解釈してファイルに書き込もうとしました。

PHP

<?php
  $data = json_decode(stripslashes($_POST['IGC']), true);
  $myFile = $_POST['filename'];
  $handle = fopen($myFile, 'w'); //or die('Cannot open file:  '.$myFile); 
  fwrite($handle,$data);
  fclose($handle);
  echo "File successfully created";
?>

それから私はあきらめて、テスト用に作成したファイルに書き込もうとしましたが、これでもうまくいきません。

<?php

  $data = 'dfjlsdkfsdlfkj';
  $handle = fopen('test.txt', 'w'); //or die('Cannot open file:  '.$myFile); 
  fwrite($handle,$data);
  fclose($handle);

 ?>

ブラウザーにエラーは表示されず、投稿は成功します。何かが機能していないことを示す唯一の兆候は、ファイルが書き込まれていないか作成されていないことです。(データ) にアクセスすると、php スクリプトの文字列が取得されます。ここで何が間違っていますか?

アップデート:

PHPスクリプトをこれに変更しました

<?php
 $data = json_decode(stripslashes($_POST['IGC']), true);
 $myFile = $_POST['filename']
 $handle = fopen('test.txt', 'w') or die('Cannot open file:  '.$myFile); 
 fwrite($handle,$data);
 fclose($handle);
 return $data;
 ?>

そして今、私はエラーを受け取ります:

kCFErrorDomainCFNetwork エラー 1.)

それが役立つ場合は、ここに投稿機能があります

    function genCode() {
  var path = $('#path_to_image').val();
  var index = path.length
  for (var i = 1; i<=3; i++) {
    index = path.lastIndexOf('/',index-1)
  }
  var fileToCreate = path.substring(path.lastIndexOf('/')+1,path.lastIndexOf('.'))+'.igc'
  var newFilePath = path.substring(0,path.lastIndexOf('.'))+'.igc'
  containerObj["target_container"] = $('#target_container').val();
  containerObj["img_path"] = path.substring(index+1);
  containerObj["img_dims"] = {x: w, y: h};
  containerObj["mode"] = $('#number_of_axes').val();
  containerObj["sd"] = {x1: $('#sd_x1').val(), y1: $('#sd_y1').val(), x2: $('#sd_x2').val(), y2: $('#sd_y2').val()};
  containerObj["number_of_graphs"] = $('#number_of_graphs').val();
  var show_waypoints = false;
  containerObj["show_waypoints"] = false;
  //$('#generated_textarea').val("attachGraph.addGraph(" + JSON.stringify(containerObj, null, '\t') + ");");
  var ajaxData = { IGC: JSON.stringify(containerObj), filename: newFilePath };
 /*   $.ajax({
      type: "POST",
      url: "../php/generateIGC.php",
      data: ajaxData,
      success: function() {
        $('#generated_textarea').val("File created.")
      }
      })
    })
   */ $.post( "../php/generateIGC.php", ajaxData, function(data) {
        $('#generated_textarea').val(data)
    } )
}
4

2 に答える 2

3

多くのことが考えられます。書き込もうとしているパスを認識しておく必要があります。また、すべてのファイル操作でスクリプトを停止しない WARNING が生成されるため、エラーを表示するように PHP の構成を微調整する必要があります。

<?php
ini_set('display_errors', 1); // show errors
error_reporting(-1); // of all levels
date_default_timezone_set('UTC'); // PHP will complain about on this error level

if (!isset($_POST['IGC'])) { // Test if this was posted
    echo "IGC not defined";
    exit;
}

if (!isset($_POST['filename'])) { // Test if this was posted too
    echo "filename not defined."
    exit;
}
$data = json_decode(stripslashes($_POST['IGC']), true);
$myFile = $_POST['filename'];
$fileToWrite = 'test.txt';
if (!is_writable($fileToWrite)) { // Test if the file is writable
    echo "Cannot write to {$fileToWrite}";
    exit;
}

$handle = fopen($fileToWrite, 'w');
if (!is_resource($handle)) { // Test if PHP could open the file
    echo "Could not open {$fileToWrite} for writting."
    exit;
}

fwrite($handle,$data);
fclose($handle);
echo "File successfully created";
?>

このスクリプトを PHP アップロード スクリプトとして使用すると、問題の詳細をより詳しく知ることができます。確認する必要がある唯一のことは、編集しているファイルがどこにあるか、および PHP に書き込み権限があるかどうかです。

ファイル名に絶対パスを使用しない場合、PHP はスクリプトのディレクトリに書き込もうとします。

于 2013-10-10T20:07:23.020 に答える
0

最後に、この問題を「解決」しました。誤って html ページをローカルで実行していたので、Apache サーバー経由では実行できなかったため、php を実行できませんでした。さらに、txt ファイルには書き込みアクセス権がなく、もともとコードにいくつかのエラーがありました。しかし、すべてかなりばかげています。

于 2013-10-14T15:42:47.663 に答える