1 | <?php |
||
7 | class MediaInfoCommandRunner |
||
8 | { |
||
9 | const FORCED_OLDXML_OUTPUT_FORMAT_ARGUMENTS = ['--OUTPUT=OLDXML', '-f']; |
||
10 | const XML_OUTPUT_FORMAT_ARGUMENTS = ['--OUTPUT=XML', '-f']; |
||
11 | |||
12 | /** |
||
13 | * @var string |
||
14 | */ |
||
15 | protected $filePath; |
||
16 | |||
17 | /** |
||
18 | * @var Process |
||
19 | */ |
||
20 | protected $process; |
||
21 | |||
22 | /** |
||
23 | * @var string |
||
24 | */ |
||
25 | protected $command = 'mediainfo'; |
||
26 | |||
27 | /** |
||
28 | * @var array |
||
29 | */ |
||
30 | protected $arguments = []; |
||
31 | |||
32 | /** |
||
33 | * @param string $filePath |
||
34 | * @param string $command |
||
35 | * @param array $arguments |
||
36 | * @param Process $process |
||
37 | * @param bool $forceOldXmlOutput |
||
38 | */ |
||
39 | 6 | public function __construct( |
|
40 | $filePath, |
||
41 | $command = null, |
||
42 | array $arguments = null, |
||
43 | Process $process = null, |
||
44 | $forceOldXmlOutput = false |
||
45 | ) { |
||
46 | 6 | $this->filePath = $filePath; |
|
47 | 6 | if ($command !== null) { |
|
48 | 2 | $this->command = $command; |
|
49 | } |
||
50 | |||
51 | 6 | $this->arguments = self::XML_OUTPUT_FORMAT_ARGUMENTS; |
|
52 | 6 | if ($forceOldXmlOutput) { |
|
53 | $this->arguments = self::FORCED_OLDXML_OUTPUT_FORMAT_ARGUMENTS; |
||
54 | } |
||
55 | |||
56 | 6 | if ($arguments !== null) { |
|
57 | 3 | $this->arguments = $arguments; |
|
58 | } |
||
59 | |||
60 | // /path/to/mediainfo $MEDIAINFO_VAR0 $MEDIAINFO_VAR1... |
||
61 | // args are given through ENV vars in order to have system escape them |
||
62 | |||
63 | 6 | $args = $this->arguments; |
|
64 | 6 | array_unshift($args, $this->filePath); |
|
65 | |||
66 | $env = [ |
||
67 | 6 | 'LANG' => setlocale(LC_CTYPE, 0), |
|
68 | ]; |
||
69 | 6 | $finalCommand = [$this->command]; |
|
70 | |||
71 | 6 | $i = 0; |
|
72 | 6 | foreach ($args as $value) { |
|
73 | 6 | $var = 'MEDIAINFO_VAR_'.$i++; |
|
74 | 6 | $finalCommand[] = '"$'.$var.'"'; |
|
75 | 6 | $env[$var] = $value; |
|
76 | } |
||
77 | |||
78 | 6 | $finalCommandString = implode(' ', $finalCommand); |
|
79 | |||
80 | 6 | if (null !== $process) { |
|
81 | 3 | $process->setCommandLine($finalCommandString); |
|
|
|||
82 | 3 | $process->setEnv($env); |
|
83 | 3 | $this->process = $process; |
|
84 | } else { |
||
85 | 3 | $this->process = new Process($finalCommandString, null, $env); |
|
86 | } |
||
87 | 6 | } |
|
88 | |||
89 | /** |
||
90 | * @throws \RuntimeException |
||
91 | * |
||
92 | * @return string |
||
93 | */ |
||
94 | 2 | public function run() |
|
103 | |||
104 | /** |
||
105 | * Asynchronously start mediainfo operation. |
||
106 | * Make call to MediaInfoCommandRunner::wait() afterwards to receive output. |
||
107 | */ |
||
108 | 1 | public function start() |
|
114 | |||
115 | /** |
||
116 | * Blocks until call is complete. |
||
117 | * |
||
118 | * @throws \Exception If this function is called before start() |
||
119 | * @throws \RuntimeException |
||
120 | * |
||
121 | * @return string |
||
122 | */ |
||
123 | 1 | public function wait() |
|
138 | } |
||
139 |
This method has been deprecated. The supplier of the class has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.