Как я уже упоминал в ответе лицея, его код не будет работать в неанглийской локали Windows, потому что тогда вывод mode
может не содержать подстрок "column" или "lines":
![mode command output](https://i.stack.imgur.com/qwUgY.png)
Вы можете найти правильную подстроку без поиска текста:
preg_match('/---+(\n[^|]+?){2}(?<cols>\d+)/', `mode`, $matches);
$cols = $matches['cols'];
Обратите внимание, что я даже не беспокоюсь о строках, потому что они ненадежны (и я на самом деле их не волную).
Редактировать: Судя по комментариям о Windows 8 (о, ты ...), я думаю, что это может быть более надежным:
preg_match('/CON.*:(\n[^|]+?){3}(?<cols>\d+)/', `mode`, $matches);
$cols = $matches['cols'];
Проверьте это, хотя я не проверял.