繁体   English   中英

将php变量传递给使用shflags的bash脚本

[英]passing php variable to bash script that uses shflags

我试图使由Web提交触发的PHP程序告诉bash脚本使用单个命令行参数运行。 我正在使用bash的shflags命令行解析器。

PHP脚本的相关部分如下:

// generate unique filename
    $destinationFolder = Mage::getBaseDir('media') . DS . 'webforms' . DS . 'xml';
    $filename = $destinationFolder . DS . $result->getId().'.xml';


    // create folder
    if (!(@is_dir($destinationFolder) || @mkdir($destinationFolder, 0777, true))) {
        throw new Exception("Unable to create directory '{$destinationFolder}'.");
    }

    // export to file
    $xmlObject->getNode()->asNiceXml($filename);

    // define parameters to pass

    exec ( '/opt/bitnami/apache2/htdocs/sfb/scripts/xform.sh --xmlfile'.' '.$filename);      

}

}
?>

bash脚本(xform.sh)(仅是测试脚本)如下。

#!/bin/bash
. ./shflags

echo "foo" >> /opt/bitnami/apache2/htdocs/sfb/scripts/seeds/xform/$$".txt"
echo "foo" >> /opt/bitnami/apache2/htdocs/sfb/scripts/seeds/xform/foo.txt

DEFINE_string 'xmlfilename' 'test' 'filename of current x.xml file from webforms' 'Z'


FLAGS "$@" || exit 1
eval set -- "${FLAGS_argv}"

echo "xml file was" ${FLAGS_xmlfilename} >> /opt/bitnami/apache2/htdocs/sfb/scripts/seeds/xform/foo.txt

bash脚本可从命令行正常运行,即

$xform.sh --xmlfilename 1.xml

将“ xml文件为1.xml”写入foo.txt文件。

当从Web触发PHP脚本时,第一部分可以正常工作,即,它将“ foo”写入两个目标文件foo.txt和$$。txt。 但是,没有出现xmlfilename变量,我真的需要将该文件名传递给命令行! (请注意,我不需要使用escapeshellarg,因为文件名是由我的PHP程序生成的,而不是由用户输入生成的。)

我已经检查了所有可以想到的文件权限。 xform.sh和shflags都是Apache拥有的www-data(Apache)组和a + x的成员。

我怀疑该问题与a)我的PHP exec语法或b)文件权限有关。 除此行中xform.sh之后的内容外,其他所有操作均按预期进行!

exec ( '/opt/bitnami/apache2/htdocs/sfb/scripts/xform.sh --xmlfile'.' '.$filename); 

更新:

通过使用一些测试代码隔离问题,我进一步缩小了问题的范围。 附:

$script="echo";
$xmlfilename="$filename";
$target=">> /opt/bitnami/apache2/htdocs/sfb/scripts/seeds/xform/foo.txt";

exec ("$script $xmlfilename $target");   

...

PHP将$ filename正确写入foo.txt,因此$ script在value为“ echo”时有效,$ filename亦有效。

当我将$ script设置为xform脚本(仅)将数据写入文件的另一种简单形式时,它也可以正常工作。

因此,问题特别是与PHP尝试将$ filename写入命令行变量时发生的事情有关。 如果Apache运行的脚本包含命令行变量,是否需要比平常更多的权限?

叹。

exec()调用中,您将标志设为--xmlfile但从命令行将其称为--xmlfilename

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM