从数组或对象在php中生成CSV
我尝试生成一个CSV文件并将其发送到FTP帐户 我的问题是对CSV文件进行popole 这段代码运行良好,但我只能在$fp中传递字符串。当我尝试使用数组时,文件到达ftp帐户时是空的 我不明白为什么 另外,我现在尝试通过一个数组进行测试,但对我来说最好的是能够使用一个对象,我如何生成这个文件从数组或对象在php中生成CSV,php,arrays,csv,ftp,Php,Arrays,Csv,Ftp,我尝试生成一个CSV文件并将其发送到FTP帐户 我的问题是对CSV文件进行popole 这段代码运行良好,但我只能在$fp中传递字符串。当我尝试使用数组时,文件到达ftp帐户时是空的 我不明白为什么 另外,我现在尝试通过一个数组进行测试,但对我来说最好的是能够使用一个对象,我如何生成这个文件 function ftp_file_put_contents($remote_file, $file_string) { // FTP login details $ftp_server=
function ftp_file_put_contents($remote_file, $file_string) {
// FTP login details
$ftp_server="ftp.xxx.it";
$ftp_user_name="xxx@xx.it";
$ftp_user_pass="xxxx";
// Create temporary file
$local_file = fopen('php://temp', 'r+');
fwrite($local_file, $file_string);
rewind($local_file);
// FTP connection
$ftp_conn=ftp_connect($ftp_server);
// FTP login
@$login_result=ftp_login($ftp_conn, $ftp_user_name, $ftp_user_pass);
// FTP upload
if($login_result)
$upload_result=ftp_fput($ftp_conn, $remote_file, $local_file, FTP_ASCII);
// Error handling
if(!$login_result) {
echo('<p>FTP error: The file could not be written to the FTP server perche $login_result.</p>');
} elseif (!$upload_result) {
echo('<p>FTP error: The file could not be written to the FTP server perche $upload_result.</p>');
} else {
echo('<p>good</p>');
echo $file_string;
}
// Close FTP connection
ftp_close($ftp_conn);
// Close file handle
fclose($local_file);
}
$Fname = 'invoce.csv';
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$fp = fopen($Fname, 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
// Function call
ftp_file_put_contents($Fname, $fp);
函数ftp\u file\u put\u内容($remote\u file,$file\u string){
//FTP登录详细信息
$ftp\u server=“ftp.xxx.it”;
$ftp\u用户名=”xxx@xx.it";
$ftp\u user\u pass=“xxxx”;
//创建临时文件
$local_file=fopen('php://temp","r+";;
fwrite($local\u file,$file\u string);
倒带($local_文件);
//FTP连接
$ftp\u conn=ftp\u connect($ftp\u server);
//FTP登录
@$login\u result=ftp\u login($ftp\u conn,$ftp\u user\u name,$ftp\u user\u pass);
//FTP上传
如果($login\u result)
$upload\u result=ftp\u fput($ftp\u conn、$remote\u file、$local\u file、ftp\u ASCII);
//错误处理
如果(!$login\u结果){
echo(“FTP错误:文件无法写入FTP服务器,可能是$login\u结果。”);
}elseif(!$upload\u结果){
echo(“FTP错误:文件无法写入FTP服务器,原因是$upload\u结果。”);
}否则{
回声(“良好”);
echo$file\u字符串;
}
//关闭FTP连接
ftp_关闭($ftp_连接);
//关闭文件句柄
fclose($local_file);
}
$Fname='invoce.csv';
$list=数组(
数组('aaa','bbb','ccc','dddd'),
数组('123','456','789'),
数组('aaa','bbb')
);
$fp=fopen($Fname,'w');
foreach($列为$字段){
fputcsv($fp$fields);
}
fclose($fp);
//函数调用
ftp文件内容($Fname,$fp);
此代码已在创建要上载的文件
$fp = fopen($Fname, 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
现在,您可以使用ftp\u put
直接上载该文件($Fname
):
$upload_result = ftp_put($ftp_conn, $remote_file, $Fname, FTP_ASCII);
使用php://temp
是没有意义的,因为它只是(尝试)创建文件的另一个副本-删除它
尽管我假设您实际上希望避免创建本地文件。因为你的代码显然是基于 然后,您需要执行以下操作:
$local_file = fopen('php://temp', 'r+');
foreach ($list as $fields) {
fputcsv($local_file, $fields);
}
rewind($local_file);
// ...
$upload_result = ftp_fput($ftp_conn, $remote_file, $local_file, FTP_ASCII);
我很困惑。您在创建CSV时遇到问题,或者在将文件FTP到某个位置时遇到问题?请尝试创建实际文件而不是临时文件。你可以在以后删除它。@MonkeyZeus,我已经上传了这个问题。不管怎样,如果我写的问题是使用数组,你认为呢?在FTP帐户中使用数组??您的代码毫无意义。将已关闭文件的无效文件描述符(
$fp
)调用到ftp\u file\u put\u contents
函数。没有问题是$fp
是不透明的文件描述符/资源变量。将它与fwrite
一起使用是没有意义的。是的,我正在使用该代码。这样,我必须在函数中移动所有数组$list。我在$file\u字符串中传递了什么?我不需要经常使用$fp?或者将$local\u file
传递给函数(但是只有在ftp\u file\u put\u contents
之后才调用callfclose
),或者只需内联ftp\u file\u put\u contents
函数即可。工作:)谢谢。现在我想我明白了我在重新编写临时文件,而且外部文件也无法通过,因为它在执行函数之前关闭了对不起@MartinPrikryl,如果我想在$list中放入一个Objct,我能做什么?要获得CSV文件,如2行:第二个值中的第一个键,我们对您的“对象”一无所知。因此,我无法告诉您如何将其表示为CSV。这是另一个问题。