Если вы хотите создать выпадающее меню выбора, вам нужно создать несколько записей, например:
<label for="printer">Choose a printer:</label>
<select id="printer" name="printer">
<option value="printer-1">Printer 1</option>
<option value="printer-2">Printer 2</option>
<option value="printer-x">The last printer</option>
</select>
Но в любом случае я бы не стал PHP вызывать некоторые команды Powershell на каждой странице. нагрузить. Это очень очень медленно, и ваша страница вообще не будет реагировать.
Если вам нужно обновить этот список, подумайте о том, чтобы время от времени иметь файл конфигурации, записанный с помощью задачи cron (запланированная задача). время. Тогда ваш код PHP на странице должен просто загрузить массив принтеров, требуя этот файл конфигурации.
Например, вы можете создать список принтеров, сохранив его в формате JSON, который легко можно читать PHP.
Команда будет выглядеть так:
powershell.exe -Command "Get-Printer -ComputerName yourprintserver | select Name,DriverName,PortName,Comment | ConvertTo-Json"
Пример вывода:
[
{
"Name": "PDF-cadwork",
"DriverName": "PDF-XChange 4.0 Lite",
"PortName": "PDF-XChange4",
"Comment": ""
},
{
"Name": "OKI C9800(PS)",
"DriverName": "OKI C9600(PS)",
"PortName": "IP_192.168.11.99",
"Comment": ""
},
{
"Name": "OKI C9800(PCL)",
"DriverName": "OKI C9800(PCL)",
"PortName": "IP_192.168.11.99",
"Comment": ""
},
{
"Name": "Microsoft XPS Document Writer",
"DriverName": "Microsoft XPS Document Writer v4",
"PortName": "PORTPROMPT:",
"Comment": ""
},
{
"Name": "HP LaserJet M570 PS",
"DriverName": "HP Universal Printing PS",
"PortName": "IP_192.168.11.96",
"Comment": ""
},
{
"Name": "HP Color LaserJet CM6030 MFP PCL6",
"DriverName": "HP Color LaserJet CM6030 MFP PCL6",
"PortName": "192.168.11.95",
"Comment": ""
},
{
"Name": "Canon iPF510",
"DriverName": "Canon iPF510",
"PortName": "IP_192.168.11.97",
"Comment": ""
}
]
Как видите, У меня фактически нет ' Поле Комментарий заполнено , но это будет ваш случай.
Допустим, этот файл затем сохраняется в printers.json
запланированным заданием. Для этого просто перенаправьте результат в ваш файл с помощью оператора >
:
powershell.exe -Command "Get-Printer -ComputerName yourprintserver | select Name,DriverName,PortName,Comment | ConvertTo-Json" > C:\path-to-php-site\config\printers.json
Затем мы можем загрузить его в PHP:
<?php
// Get the list of printers from the automatically updated JSON file.
// Caution: PowerShell creates the file in "UCS-2 LE BOM" format.
// PHP wants to read UTF-8 so we'll have to convert it.
// Read the JSON created by the scheduled task running PowerShell.
$printers_json_ucs2_le_bom = file_get_contents('printers.json');
// Convert to UTF-8 encoding.
$printers_json_utf8_bom = mb_convert_encoding(
$printers_json_ucs2_le_bom, // Source content.
'UTF-8', // Destination encoding.
'UCS-2LE' // Source encoding.
);
// Remove the BOM marker which is still there.
$printers_json_utf8 = preg_replace('/\x{FEFF}/u', '', $printers_json_utf8_bom);
// Decode the JSON to a PHP variable.
$printers = json_decode($printers_json_utf8);
/**
* Get the HTML code to create a select drop down to choose a printer.
*
* @param array $printers The list of printers.
* @param string $name The name of the field in the form.
* @param string $id THe id of the fiedl in the form.
* @param string $lable The label to display before the select drop down.
*
* @return string The HTML code to put in your form.
*/
function get_printers_select(array $printers, $name = 'printer', $id = 'printer', $label = 'Select your printer')
{
$html = '';
if (!empty($label)) {
$html .= '<label for="' . $id . '">' . htmlspecialchars($label) . "</label>\n";
}
$html .= '<select id="' . $id . '" name="' . $name . "\">\n";
foreach ($printers as $printer) {
$html .= ' <option value="' . htmlentities($printer->Comment) . '">' .
htmlspecialchars($printer->Comment) . "</option>\n";
}
$html .= "</select>\n";
return $html;
}
// Your HTML and <form> should come here...
print get_printers_select($printers);
И это выведет это HTML, если я заменю $printer->Comment
на $printer->Name
:
<label for="printer">Select your printer</label>
<select id="printer" name="printer">
<option value="PDF-cadwork">PDF-cadwork</option>
<option value="OKI C9800(PS)">OKI C9800(PS)</option>
<option value="OKI C9800(PCL)">OKI C9800(PCL)</option>
<option value="Microsoft XPS Document Writer">Microsoft XPS Document Writer</option>
<option value="HP LaserJet M570 PS">HP LaserJet M570 PS</option>
<option value="HP Color LaserJet CM6030 MFP PCL6">HP Color LaserJet CM6030 MFP PCL6</option>
<option value="Canon iPF510">Canon iPF510</option>
</select>