windows — Доступ к буферу обмена из php-cli?

Есть ли какой-нибудь способ доступа к буферу обмена из php-cli? Мне это особенно нужно для Windows, но кроссплатформенное решение тоже подойдет.

0

Решение

$ SomeVar = «значение»;

shell_exec («echo $ someVar | clip»);

ссылка: Копировать в буфер обмена из сценария командной строки php в Windows 7

0

Другие решения

Переносимая функция, которая должна работать в Windows 7+ (PowerShell 2+), системах Linux на основе X.org и MacOS:

function getClipboard():string{
if(PHP_OS_FAMILY==="Windows"){
// works on windows 7 + (PowerShell v2 + )
return substr(shell_exec('powershell -sta "add-type -as System.Windows.Forms; [windows.forms.clipboard]::GetText()"'),0,-2);
}elseif(PHP_OS_FAMILY==="Linux"){
// untested! but should work on X.org-based linux GUI's
return substr(shell_exec('xclip -out -selection primary'),0,-1);
}elseif(PHP_OS_FAMILY==="Darwin"){
// untested!
return substr(shell_exec('pbpaste'),0,-1);
}else{
throw new \Exception("running on unsupported OS: ".PHP_OS_FAMILY." - only Windows, Linux, and MacOS supported.");
}
}

Что касается записи в буфер обмена:

function setClipboard(string $new):bool{
if(PHP_OS_FAMILY==="Windows"){
// works on windows 7 +
$clip=popen("clip","wb");
}elseif(PHP_OS_FAMILY==="Linux"){
// untested! but should work on X.org-based linux GUI's
$clip=popen('xclip -in -selection primary','wb');
}elseif(PHP_OS_FAMILY==="Darwin"){
// untested!
$clip=popen('pbcopy','wb');
}else{
throw new \Exception("running on unsupported OS: ".PHP_OS_FAMILY." - only Windows, Linux, and MacOS supported.");
}
$written=fwrite($clip,$new);
return (pclose($clip)===0 && strlen($new)===$written);
}
0