Como mencioné en la respuesta de lyceus, su código fallará en Windows de configuración regional que no esté en inglés porque la salida de mode
puede no contener las subcadenas "columnas" o "líneas":
Puede encontrar la subcadena correcta sin buscar texto:
preg_match('/---+(\n[^|]+?){2}(?<cols>\d+)/', `mode`, $matches);
$cols = $matches['cols'];
Tenga en cuenta que ni siquiera me estoy molestando con las líneas porque no es confiable (y en realidad no me importan).
Editar: Según los comentarios sobre Windows 8 (oh, tú ...), creo que esto puede ser más confiable:
preg_match('/CON.*:(\n[^|]+?){3}(?<cols>\d+)/', `mode`, $matches);
$cols = $matches['cols'];
Sin embargo, pruébelo porque no lo probé.