是否可以检查当前的操作系统?下面的cmd命令在windows上失败,因为chmod不存在
{ ...
"scripts": {
"post-update-cmd": "chmod -R 777 ../log"
}
}
有解决这个问题的方法吗?此致敬礼,Robert
我认为最简单的解决方案是使用PHP本身:
{ ...
"scripts": {
"post-update-cmd": "php -r chmod('../log', 0777);"
}
}
这要求php
二进制文件在Linux/OSX/Windows的PATH(或类似)中。
Ps:我想不起来了,但我相信路径应该是相对的你的作曲家。Json是,所以您可能需要调整上面的内容相应的路径。
可能的解决方案是将post更新命令移到钩子中,并在那里执行所有必要的操作系统检查。在你的作曲家:
{ ...
"scripts": {
"post-update-cmd": "HooksMyHook::checkOS()"
},
"autoload": {
"psr-0": {
"Hooks": "src/"
}
}
}
然后创建一个类来处理你的逻辑:
...
class MyHook(){
public static function checkOS(){
// 1 - get operating system
// 2 - is chmod exist? execute chmod -R 777 ../log
}
}
感谢@alcohol为我指明了正确的方向。简单的解决方案:
"scripts": {
"post-update-cmd": "php post-update-cmd.php"
}
post-update-cmd.php:
#!/bin/php
<?php
ini_set('register_argc_argv', 0);
if (!isset($argc) || is_null($argc)) die('CLI only');
$log_dir = dirname(dirname(__FILE__)). DIRECTORY_SEPARATOR . 'log';
if( strpos(strtolower(php_uname('s')), 'win') === false ) {
exec("mkdir -p $log_dir && chmod -R 777 $log_dir");
} else { // Windows !
if( !file_exists($log_dir) ) {
exec("mkdir $log_dir");
}
echo "WinOS - no chmod availablen";
}
echo "Finishedn";