2017-04-04 11 views
9

मुझे यह PHP स्क्रिप्ट मिली है (नीचे देखें) जो मुझे SQL क्वेरी का उपयोग करके CSV फ़ाइल उत्पन्न करने और इसे मेरी स्थानीय मशीन पर डाउनलोड करने की अनुमति देता है लेकिन कैसे मैं इसे एक ही समय में बैकअप प्रतिलिपि रखने के लिए दूरस्थ सर्वर (http://myserverblabla.com/uploads) में सहेजता हूं? क्या यह प्राप्त करने के लिए मेरी मौजूदा स्क्रिप्ट को संशोधित करना संभव होगा?सीएसवी उत्पन्न करें, स्थानीय मशीन पर डाउनलोड करें और उसी समय सर्वर पर सहेजें

include 'class/database.class.php'; 

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header("Content-Type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=\"filename.csv\";"); 
header("Content-Transfer-Encoding: binary"); 

$database = new Database(); 

try{ 
    // Select query 
    $database->query("SOME SQL QUERY"); 
    $data = $database->resultset(); 

    $fp = fopen('php://temp', 'r+'); 
    foreach ($data as $row) { 
     if (! isset($ch)) { 
      foreach ($row as $header => $value) { 
       if (isset($ch)) 
        $ch .= ","; 
        else 
         $ch = ""; 

         $ch .= '"' . addslashes($header) . '"'; 
      } 
     } 
     fputcsv($fp, $row, ",", '"'); 
    } 

    rewind($fp); 
    $csv = fread($fp, 1048576); 
    fclose($fp); 
    echo $ch . PHP_EOL . rtrim($csv, PHP_EOL); 
} 
catch(PDOException $e){ 
    echo json_encode((object)['error'=>true,'message'=>$e->getMessage()]); 
} 
+0

http://myserverblabla.com/uploads के विनिर्देश क्या हैं? क्या आप वहां जा सकते हैं? क्या आप वहां PHP का उपयोग कर सकते हैं? सीवी डाउनलोड करने के लिए आपको लॉगिन या समान होना चाहिए? – borracciaBlu

उत्तर

5

मैं अपने आप को समझ गए होंगे ...

मैं आदेश सीएसवी सर्वर में फाइल को बचाने के लिए fopen समारोह बदल दिया है:

$fp = fopen('uploads/test.csv', 'w+');

3

एक आसान तरीका आपके सर्वर पर फ़ाइल अपलोड करता है। इसे स्वचालित रूप से करने के लिए थोड़ा कठिन है, लेकिन कोशिश करने की तरह कुछ भी नहीं है। इसके लिए आपको थोड़ा AJAX, Json, JQuery और फ़ाइल अपलोड करने की आवश्यकता है।

एक सामान्य फाइल अपलोड आप अपने ग्राहक में की जरूरत है:

<!DOCTYPE html> 
<html> 
<body> 

<form action="upload.php" method="post" enctype="multipart/form-data"> 
    Select image to upload: 
    <input type="file" name="fileToUpload" id="fileToUpload"> 
    <input type="submit" value="Upload Image" name="submit"> 
</form> 

</body> 
</html> 

अपने सर्वर में:

<?php 
$target_dir = "uploads/"; 
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); 
// Check if image file is a actual image or fake image 
if(isset($_POST["submit"])) { 
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); 
    if($check !== false) { 
     echo "File is an image - " . $check["mime"] . "."; 
     $uploadOk = 1; 
    } else { 
     echo "File is not an image."; 
     $uploadOk = 0; 
    } 
} 
// Check if file already exists 
if (file_exists($target_file)) { 
    echo "Sorry, file already exists."; 
    $uploadOk = 0; 
} 
// Check file size 
if ($_FILES["fileToUpload"]["size"] > 500000) { 
    echo "Sorry, your file is too large."; 
    $uploadOk = 0; 
} 
// Allow certain file formats 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" 
&& $imageFileType != "gif") { 
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; 
    $uploadOk = 0; 
} 
// Check if $uploadOk is set to 0 by an error 
if ($uploadOk == 0) { 
    echo "Sorry, your file was not uploaded."; 
// if everything is ok, try to upload file 
} else { 
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { 
     echo "The file ". basename($_FILES["fileToUpload"]["name"]). " has been uploaded."; 
    } else { 
     echo "Sorry, there was an error uploading your file."; 
    } 
} 
?> 

आपके मामले में आप एक इंटरफेस है कि करने के लिए फ़ाइल मिल बनाने के लिए नहीं करना चाहते हैं सर्वर। इसके लिए आपको कुछ AJAX और जेसन या Jquery फ़ाइल अपलोड का उपयोग करने की आवश्यकता है।

उदाहरण के लिए साइट पर देखें।

मैंने ऐसा कुछ करने की कोशिश की है, लेकिन मैं AJAX पोस्टिंग में फंस गया, यह काम करता था लेकिन केवल एक रूप में। सर्वर के लिए केवल फाइल भेजने के लिए इसके आसपास का तरीका है।

जब आप पहला कोड बनाते हैं और पहली समस्याएं दिखाई देती हैं तो मैं मदद करने की कोशिश करता हूं। दो सिर एक से बेहतर काम करते हैं।

5

क्यों न केवल आपके द्वारा उत्पन्न फ़ाइल की प्रतिलिपि बनाते हैं? बस के बाद copy(your file $fp, destination dir/filename); की तरह कुछ डालने अपने fclose($fp);

2

मैं अपना कोड बदल दिया है इसे जांचें:

include 'class/database.class.php'; 

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header("Content-Type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=\"filename.csv\";"); 
header("Content-Transfer-Encoding: binary"); 

$database = new Database(); 

try{ 
    // Select query 
    $database->query("SOME SQL QUERY"); 
    $data = $database->resultset(); 

    ob_start(); 
    $fp = fopen('path/to/folder/filename.csv', 'w'); 
    foreach ($data as $row) { 

     if (! fputcsv($fp, $row)) 
     { 
      show_error("Can't write line $n: $line"); 
     } 
    } 
    fclose($fp) or show_error("Can't close path/to/folder/filename.csv"); 
    $str = ob_get_contents(); 
    ob_end_clean(); 
    print "\xEF\xBB\xBF"; // UTF-8 BOM 
    print $str; 
} 
catch(PDOException $e){ 
    echo json_encode((object)['error'=>true,'message'=>$e->getMessage()]); 
} 

इसके अलावा सीएसवी फ़ोल्डर शोल डी लिखने और पढ़ने के लिए अनुमति है।

संबंधित मुद्दे