【发布时间】:2011-12-13 14:57:40
【问题描述】:
我想知道如何将文件(在我的情况下为 csv)的内容作为参数传递给 php 中的 exec 调用的命令行可执行文件(在 C 或 Objective C 中)。
这是我所做的:用户从这样的 URL 加载其文件的内容:
http://www.myserver.com/model.php?fileName=test.csv
那么下面的代码就可以让php解析并加载csv文件了:
<?php
$f = $_GET['fileName'];
$handle = fopen("$f", "r");
$data = array();
while (($line = fgetcsv($handle)) !== FALSE) {
$data[] = $line;
}
?>
我卡住的地方是如何将此 csv 文件的内容作为参数传递给 exec。即使我可以假设 csv 已知只有两列,它有多少行是用户特定的,所以我不能将所有值作为参数一一传递,例如
exec("/path_to_executable/model -a $data[0][0] -b $data[0][1] .....");
我猜唯一的替代解决方案是写这样的东西:
exec("/path_to_executable/model -fileName test.csv");
并让命令行可执行文件进行 csv 解析,但在这种情况下,我认为我需要将 csv 文件物理写入服务器端。我想知道如果几个人同时使用自己不同的 csv 文件访问网页会发生什么情况,他们是否会相互覆盖?
我想一定有一个非常合适的方法来做到这一点,但我还没有弄清楚。任何想法?谢谢!
【问题讨论】:
-
什么是有效的参数输入可以提供给可执行文件?
-
它或多或少可以是任何东西,因为我编写了可执行文件。如果我知道 csv 大小,我认为可能是 csv 文件名或值。
-
by
one by one是否等于line by line? -
不,不是逐行,而是逐个值。 csv 包含按列组织的两个时间序列。每一行代表不同的年份。我可以传递第一个时间序列,然后传递下一个,或者传递第一年的两个时间序列的值,然后传递第二年,依此类推。命令行可执行文件将妥善处理此问题。
标签: php c exec command-line-arguments