PHP将CSV文件保存到非本地服务器


PHP Save CSV File to Server Not Local

我搜索了论坛,发现了一些与此相关的帖子,但运气不好,我希望有人能帮助

我的文件生成了一个CSV文件,我可以将其保存到桌面,我需要将该文件保存到我们的Web服务器/citylink 上的目录

我一直在尝试

$filename="citylink";  $directory = "/httpdocs/citylink";
$csv_filename = $filename."_".date("Y-m-d_H-i",time()).".csv";
$fd = fopen ("$directory" . $csv_filename, "w");
echo fputs($fd);
fclose($fd);

但是运气不好,我确信我没有把它放在正确的位置。。

非常感谢任何帮助

提前感谢

Russell

完整

`

<?php
require('includes/application_top.php');
// csv settings
define("CSV_SEPARATOR", ",");
define("CSV_NEWLINE", "'r'n");

//csv dump info
$filename="citylink";  $directory = "/httpdocs/citylink";
$csv_filename = $filename."_".date("Y-m-d_H-i",time()).".csv";
$fd = fopen ("$directory" . $csv_filename, "w");
echo fputs($fd);
fclose($fd);

// not submitted, so show form to submit
if (! $_POST['submitted'] && ! $_POST['submitted' == 1 ] )  {
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo TITLE; ?></title>
<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
<link rel="stylesheet" type="text/css" href="includes/cssjsmenuhover.css" media="all" id="hoverJS">
<script language="javascript" src="includes/menu.js"></script>
<script language="javascript" src="includes/general.js"></script>
<script type="text/javascript">
  <!--
  function init()
  {
    cssjsmenu('navbar');
    if (document.getElementById)
    {
      var kill = document.getElementById('hoverJS');
      kill.disabled = true;
    }
  }
  // -->
</script>
</head>
<body onLoad="init()">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->
<!-- body //-->
<table border="0" width="100%" cellspacing="2" cellpadding="2">
  <tr>
<td>
  <div class="pageHeading"><?php echo 'City Link - Send Jobs To Xtend'; ?></div>
<br><br>
  <form method="post" action="<?php echo $PHP_SELF;?>">
  <table border="0" cellpadding="3">
  <tr>
    <td><?php echo 'Start From Invoice'; ?></td>
    <td><input name="start" size="5" value="<?php echo (int)$_POST['start']; ?>">
  </tr>
  <tr>
    <td><?php echo 'End Invoice'; ?></td>
    <td><input name="end" size="5" value="<?php echo (int)$_POST['end']; ?>">
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" value="<?php echo 'Send File To X-tend'; ?>"></td>
  </tr>
  </table>
  <input type="hidden" name="submitted" value="1">
  </form>
</td>
  </tr>
</table>
<!-- body_eof //-->
<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
</body>
</html>
<?php
}
// submitted so generate csv
else
{
  generatecsv((int)$_POST['start'], (int)$_POST['end']);
}
require(DIR_WS_INCLUDES . 'application_bottom.php');

// generates csv file from $start order to $end order, inclusive
function generatecsv($start, $end)
{
  global $db;
  $sql =  "SELECT * FROM " . TABLE_ORDERS . "
           WHERE orders_id >= :start:
           AND   orders_id <= :end:";
  $sql = $db->bindVars($sql, ':start:', $start, 'integer');
  $sql = $db->bindVars($sql, ':end:',   $end,   'integer');
  $orders = $db->Execute($sql);
  header("Pragma: cache");
  header("Content-Type: text/comma-separated-values");
  header("Content-Disposition: attachment; filename=" . 'city_link_export.csv');

  while (!$orders->EOF)
  {
    $codes_lookup = get_country_and_zone_code($orders->fields['delivery_country'], $orders->fields['delivery_state']);
    {
      list($country, $province) = $codes_lookup;

      //CSV OUTPUT FILE

      echo quote($orders->fields['orders_id']).CSV_SEPARATOR;
      echo quote($orders->fields['customers_id']).CSV_SEPARATOR;
      echo quote($orders->fields['delivery_name']).CSV_SEPARATOR;
      echo quote($orders->fields['delivery_street_address']).CSV_SEPARATOR;
      echo quote($orders->fields['delivery_suburb']).CSV_SEPARATOR;
      echo quote('').CSV_SEPARATOR;   // Address Line3
      echo quote($orders->fields['delivery_city']).CSV_SEPARATOR;
      echo quote($orders->fields['delivery_state']).CSV_SEPARATOR;
      echo quote($orders->fields['delivery_postcode']).CSV_SEPARATOR;
      echo quote($orders->fields['customers_telephone']).CSV_SEPARATOR;
      echo quote('').CSV_SEPARATOR;  //email address not included becauce of amazon emails
      echo quote($orders->fields['date_purchased']).CSV_SEPARATOR;
      echo quote('107').CSV_SEPARATOR;  //service level
      echo quote('9').CSV_SEPARATOR;   // default pacel weight
      echo quote('1').CSV_SEPARATOR;   // default no of parcels
      echo quote('J1').CSV_SEPARATOR;   // default package description
      echo quote($orders->fields['delivery_name']).CSV_SEPARATOR;
      echo quote('').CSV_SEPARATOR;   // bulk name
      echo quote('').CSV_SEPARATOR;   // consignment number
      echo quote('8108991').CSV_SEPARATOR;   // city link account number
      echo quote('').CSV_SEPARATOR;   // special delivery instructions
      echo quote('OYPLA').CSV_SEPARATOR;   // Description of goods (mandatory for Irish deliveries
      echo quote('').CSV_SEPARATOR;   // printer mappinng
      echo quote('N').CSV_SEPARATOR;   // saturday delivery Y/N
      echo quote('N').CSV_SEPARATOR;   // return shipment Y/N
      echo quote('').CSV_SEPARATOR;   // default payment on delivery ammount
      echo quote('').CSV_SEPARATOR;   // default value of goods ammount
      echo quote('').CSV_SEPARATOR;   // PDN, pre delivery notification
      echo quote('N').CSV_SEPARATOR;   // Exchange Marker
      echo quote().CSV_NEWLINE;
    }

    $orders->MoveNext();
  }
}
// returns the name for a shipping status
function getorderstatus($statusid)
{
  global $db;
  $query = "select * from " . TABLE_ORDERS_STATUS . " where orders_status_id = $statusid";
  $statii = $db->Execute($query);
  while (!$statii->EOF) {
    return $statii->fields['orders_status_name'];
  }
  return $statusid;
}
// formats a value suitable for including in a csv file
function quote($value)
{
  // if quote mark in string then escape with another quote mark
  // then put inside quote marks and return
  if (strstr($value, '"') !== FALSE)
  {
    $value = str_replace('"', '""', $value);
    return '"$value"';
  }
  // if separator in string then put inside quote marks
  if (strstr($value, CSV_SEPARATOR) !== FALSE)
  {
    return '"$value"';
  }
  return $value;
}
  function get_country_and_zone_code($country_name, $zone_name) {
    global $db;
    $sql = "select countries_id, countries_name, countries_iso_code_2, countries_iso_code_3
            from " . TABLE_COUNTRIES . "
            where countries_name = :ctryname: ";
    $sql = $db->bindVars($sql, ':ctryname:', $country_name, 'string');
    $result1 = $db->Execute($sql);
    if ($result1->RecordCount() == 0) return 'BAD';
    $sql = "select zone_code, zone_id, zone_name
            from " . TABLE_ZONES . "
            where zone_country_id = :ctryid:
            and zone_name = :zonename:";
    $sql = $db->bindVars($sql, ':ctryid:', $result1->fields['countries_id'], 'integer');
    $sql = $db->bindVars($sql, ':zonename:', $zone_name, 'string');
    $result2 = $db->Execute($sql);
    if ($result2->RecordCount() == 0) {
      return 'BAD';
    } else {
      return array($result1->fields['countries_iso_code_2'], $result2->fields['zone_code']);
    }
  }

?>

`

此部分错误:

$filename="citylink";  $directory = "/httpdocs/citylink";
$csv_filename = $filename."_".date("Y-m-d_H-i",time()).".csv";
$fd = fopen ("$directory" . $csv_filename, "w");

您在不使用目录分隔符的情况下连接$directory$csv_filename。这将导致:/httpdocs/citylinkcitylink_Y-m-d_H-i.csv-这可能是错误的。

用途:$fd = fopen ("$directory/$csv_filename", "w");

其次,您需要确保您的$directory是正确的绝对路径。如果不能100%确定,可以使用相对路径(相对于THIS文件)。