Php 写入文本文件工作不正常(CodeIgniter)
我有一个简单的脚本,它将数据从MySQL写入文本文件,并立即下载文件,我的表单select inputs中几乎没有post参数,因此如果我更改某些内容并按submit按钮对数据进行排序并写入文件,我会得到包含旧数据的文件,这是以前的,所以,主要的问题是,如果我想得到好的信息后,我改变我的过滤器,我需要做的总是两次提交和第二次提交给我的最后一个信息好文件。我如何预防这个问题Php 写入文本文件工作不正常(CodeIgniter),php,codeigniter,Php,Codeigniter,我有一个简单的脚本,它将数据从MySQL写入文本文件,并立即下载文件,我的表单select inputs中几乎没有post参数,因此如果我更改某些内容并按submit按钮对数据进行排序并写入文件,我会得到包含旧数据的文件,这是以前的,所以,主要的问题是,如果我想得到好的信息后,我改变我的过滤器,我需要做的总是两次提交和第二次提交给我的最后一个信息好文件。我如何预防这个问题 public function all() { $this->load->helper('file');
public function all()
{
$this->load->helper('file');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="orders_all.txt"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: '.filesize('./assets/downloads/orders_all.txt'));
$data = array(
'customer_id' => $this->input->post('customer_id', TRUE), // Params from select inputs
'product_id' => $this->input->post('product_id', TRUE),
'state' => $this->input->post('state', TRUE),
'date' => $this->input->post('date', TRUE)
);
$result = $this->orders_model->get_orders_by_filter($data);
$str = '';
foreach ($result as $row)
{
$str .= $row['customer_title'] . ';' . $row['product_title'] . ';' . $row['product_code'] . ';' . $row['quantity'] . ';' . $row['created_at']."\r\n";
}
if (write_file('./assets/downloads/orders_all.txt', $str))
{
readfile('./assets/downloads/orders_all.txt');
}
}
您的
内容长度将是错误的,因为它正在读取一个不存在的文件
如果您只编写供他人下载的文件,请一起跳过该步骤(如果两个人同时调用脚本,也会导致问题!):
相反,您可以:
header('Content-Length: ' . strlen($str));
echo $str;
i、 e.计算字符串后,将内容长度标题移动到,只发送字符串而不写入文件
如果必须写入文件,则只需将标题移动到底部的“If”中即可
if (write_file('./assets/downloads/orders_all.txt', $str))
{
header('Content-Length: '.filesize('./assets/downloads/orders_all.txt'));
readfile('./assets/downloads/orders_all.txt');
}
您的内容长度将是错误的,因为它正在读取一个不存在的文件
如果您只编写供他人下载的文件,请一起跳过该步骤(如果两个人同时调用脚本,也会导致问题!):
相反,您可以:
header('Content-Length: ' . strlen($str));
echo $str;
i、 e.计算字符串后,将内容长度标题移动到,只发送字符串而不写入文件
如果必须写入文件,则只需将标题移动到底部的“If”中即可
if (write_file('./assets/downloads/orders_all.txt', $str))
{
header('Content-Length: '.filesize('./assets/downloads/orders_all.txt'));
readfile('./assets/downloads/orders_all.txt');
}
尝试将所有标题
放在代码的底部。尝试将所有标题
放在代码的底部。您甚至可以将其删除,但它不是compulsay@Dagon:非常正确:)可以避免潜在的问题。还应该注意,如果您使用的是多字节字符,那么它实际上也可能是错误的。谢谢!这真的很有帮助。现在我明白了,不需要将数据写入文本文件,只需更改页眉即可。您甚至可以将其删除,这是不必要的compulsay@Dagon:非常正确:)可以避免潜在的问题。还应该注意,如果您使用的是多字节字符,那么它实际上也可能是错误的。谢谢!这真的很有帮助。现在我明白了,不需要将数据写入文本文件,只需要更改页眉即可。