php - 如何将文件作为参数传递给 php exec?

标签 php c exec command-line-arguments

我想知道如何将文件(在我的例子中是 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/

相关文章:

php - 从原始 mysql 文件创建 sql 文件

php - 使用变量选项构造 PHP/MySQL 搜索查询

c - 为什么 bash 在分配时不自动导出 PATH?

java - 在 Android 上通过 java 代码运行 Shell 命令?

javascript - 将 php 数组转换为 js 数组,并动态调整数组大小

javascript - 单击按钮两次即可实现多种功能

php - 谁拥有 php exec tar 提取的文件?

Python os.exec() : Termination on running 'notify-send'

c - 无论如何要得到不是 unix C 选项的论点

c - 从结构体中的数组中减去