如何解决如何通过命令行将csv文件作为输入传递?
我被赋予要执行的任务,但我不确定如何像在命令文件中那样传递csv文件,因此我将其硬编码为代码。但是,我仍然想学习如何做?任何帮助表示赞赏。
创建一个PHP脚本,该脚本从命令行执行,接受CSV文件作为输入 (请参阅下面的命令行指令)并处理CSV文件。解析后的文件数据为 插入到MySQL数据库中。
The PHP script should include these command line options (directives):
• --file [csv file name] – this is the name of the CSV to be parsed
• --create_table – this will cause the MySQL users table to be built (and no further
• action will be taken)
• --dry_run – this will be used with the --file directive in case we want to run the
script but not insert into the DB. All other functions will be executed,but the
database won't be altered
• -u – MySQL username
• -p – MySQL password
• -h – MySQL host
• --help – which will output the above list of directives with details.
我所做的是在php文件中硬编码csv文件。如何接受通过命令行输入的csv文件?
我的代码:
<?php
require 'database.php';
$lines = file('users.csv',FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
$csv = array_map('str_getcsv',$lines);
$col_names = array_shift($csv);
$users = [];
$stmt = $dbh->prepare('INSERT INTO users (name,surname,email) VALUES (?,?,?)');
foreach($csv as $row) {
$users[] = [
$col_names[0] => ucfirst(strtolower($row[0])),$col_names[1] => ucfirst(strtolower($row[1])),$col_names[2] => strtolower(strtolower($row[2])),];
}
foreach($users as $user) {
$stmt->execute($user);
}
?>
解决方法
首先,您必须定义要接受的选项,在这种情况下,我们只定义了“文件”选项。
$options = ['file:'];
然后,当您执行脚本时:
php script.php --file=users.csv
您将收到已经定义的所有选项。
$values = getopt(null,$options);
您将遇到这样的情况:
<?php
require 'database.php';
$options = ['file:'];
$values = getopt(null,$options);
$lines = file($values['file'],FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
// Rest of the script...
我建议您阅读getopt function的文档,以帮助您理解和完成任务。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。