我想知道如何将文件(在我的例子中是 csv)的内容作为命令行可执行文件(在 C 或 Objective C 中)的参数传递给 php 中的 exec 调用。
这是我所做的:用户从这样的 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 文件访问网页会发生什么,他们是否会互相覆盖?
我想一定有一个非常合适的方法来做到这一点,但我还没有弄清楚。任何想法?谢谢!
最佳答案
我建议将这些数据保存在磁盘上,并在命令行实用程序中加载它——这样就不会那么麻烦了。但是,如果您不能这样做,只需一次将其传递到 1(未解析)行:
$command = "/path_to_executable/model";
foreach ($fileData as $line) {
$command .= ' "'.escapeshellarg($line).'"';
}
exec($command);
然后您可以通过循环 argv
将数据提取到您的实用程序中,其中 argv[0]
是第一行,argv[1]
为第二行,以此类推。
关于php - 如何将文件作为参数传递给 php exec?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7867422/