Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从数组或对象在php中生成CSV_Php_Arrays_Csv_Ftp - Fatal编程技术网

从数组或对象在php中生成CSV

从数组或对象在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=

我尝试生成一个CSV文件并将其发送到FTP帐户

我的问题是对CSV文件进行popole

这段代码运行良好,但我只能在$fp中传递字符串。当我尝试使用数组时,文件到达ftp帐户时是空的

我不明白为什么

另外,我现在尝试通过一个数组进行测试,但对我来说最好的是能够使用一个对象,我如何生成这个文件

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
之后才调用call
fclose
),或者只需内联
ftp\u file\u put\u contents
函数即可。工作:)谢谢。现在我想我明白了我在重新编写临时文件,而且外部文件也无法通过,因为它在执行函数之前关闭了对不起@MartinPrikryl,如果我想在$list中放入一个Objct,我能做什么?要获得CSV文件,如2行:第二个值中的第一个键,我们对您的“对象”一无所知。因此,我无法告诉您如何将其表示为CSV。这是另一个问题。