ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
getid3_write_metaflac Class Reference

getID3() by James Heinrich info@.nosp@m.geti.nosp@m.d3.or.nosp@m.g // More...

+ Collaboration diagram for getid3_write_metaflac:

Public Member Functions

 __construct ()
 
 WriteMetaFLAC ()
 
 DeleteMetaFLAC ()
 
 CleanmetaflacName ($originalcommentname)
 

Data Fields

 $filename
 
 $tag_data
 
 $warnings = array()
 
 $errors = array()
 

Detailed Description

getID3() by James Heinrich info@.nosp@m.geti.nosp@m.d3.or.nosp@m.g //

Definition at line 18 of file write.metaflac.php.

Constructor & Destructor Documentation

◆ __construct()

getid3_write_metaflac::__construct ( )

Definition at line 26 of file write.metaflac.php.

26  {
27  return true;
28  }

Member Function Documentation

◆ CleanmetaflacName()

getid3_write_metaflac::CleanmetaflacName (   $originalcommentname)

Definition at line 150 of file write.metaflac.php.

Referenced by WriteMetaFLAC().

150  {
151  // A case-insensitive field name that may consist of ASCII 0x20 through 0x7D, 0x3D ('=') excluded.
152  // ASCII 0x41 through 0x5A inclusive (A-Z) is to be considered equivalent to ASCII 0x61 through
153  // 0x7A inclusive (a-z).
154 
155  // replace invalid chars with a space, return uppercase text
156  // Thanks Chris Bolt <chris-getid3Øbolt*cx> for improving this function
157  // note: *reg_replace() replaces nulls with empty string (not space)
158  return strtoupper(preg_replace('#[^ -<>-}]#', ' ', str_replace("\x00", ' ', $originalcommentname)));
159 
160  }
+ Here is the caller graph for this function:

◆ DeleteMetaFLAC()

getid3_write_metaflac::DeleteMetaFLAC ( )

Definition at line 104 of file write.metaflac.php.

104  {
105 
106  if (preg_match('#(1|ON)#i', ini_get('safe_mode'))) {
107  $this->errors[] = 'PHP running in Safe Mode (backtick operator not available) - cannot call metaflac, tags not deleted';
108  return false;
109  }
110 
111  $oldignoreuserabort = ignore_user_abort(true);
112  if (GETID3_OS_ISWINDOWS) {
113 
114  if (file_exists(GETID3_HELPERAPPSDIR.'metaflac.exe')) {
115  // To at least see if there was a problem, compare file modification timestamps before and after writing
116  clearstatcache();
117  $timestampbeforewriting = filemtime($this->filename);
118 
119  $commandline = GETID3_HELPERAPPSDIR.'metaflac.exe --remove-all-tags "'.$this->filename.'" 2>&1';
120  $metaflacError = `$commandline`;
121 
122  if (empty($metaflacError)) {
123  clearstatcache();
124  if ($timestampbeforewriting == filemtime($this->filename)) {
125  $metaflacError = 'File modification timestamp has not changed - it looks like the tags were not deleted';
126  }
127  }
128  } else {
129  $metaflacError = 'metaflac.exe not found in '.GETID3_HELPERAPPSDIR;
130  }
131 
132  } else {
133 
134  // It's simpler on *nix
135  $commandline = 'metaflac --remove-all-tags "'.$this->filename.'" 2>&1';
136  $metaflacError = `$commandline`;
137 
138  }
139 
140  ignore_user_abort($oldignoreuserabort);
141 
142  if (!empty($metaflacError)) {
143  $this->errors[] = 'System call to metaflac failed with this message returned: '."\n\n".$metaflacError;
144  return false;
145  }
146  return true;
147  }

◆ WriteMetaFLAC()

getid3_write_metaflac::WriteMetaFLAC ( )

Definition at line 30 of file write.metaflac.php.

References $key, and CleanmetaflacName().

30  {
31 
32  if (preg_match('#(1|ON)#i', ini_get('safe_mode'))) {
33  $this->errors[] = 'PHP running in Safe Mode (backtick operator not available) - cannot call metaflac, tags not written';
34  return false;
35  }
36 
37  // Create file with new comments
38  $tempcommentsfilename = tempnam(GETID3_TEMP_DIR, 'getID3');
39  if (is_writable($tempcommentsfilename) && is_file($tempcommentsfilename) && ($fpcomments = fopen($tempcommentsfilename, 'wb'))) {
40  foreach ($this->tag_data as $key => $value) {
41  foreach ($value as $commentdata) {
42  fwrite($fpcomments, $this->CleanmetaflacName($key).'='.$commentdata."\n");
43  }
44  }
45  fclose($fpcomments);
46 
47  } else {
48  $this->errors[] = 'failed to open temporary tags file, tags not written - fopen("'.$tempcommentsfilename.'", "wb")';
49  return false;
50  }
51 
52  $oldignoreuserabort = ignore_user_abort(true);
53  if (GETID3_OS_ISWINDOWS) {
54 
55  if (file_exists(GETID3_HELPERAPPSDIR.'metaflac.exe')) {
56  //$commandline = '"'.GETID3_HELPERAPPSDIR.'metaflac.exe" --no-utf8-convert --remove-all-tags --import-tags-from="'.$tempcommentsfilename.'" "'.str_replace('/', '\\', $this->filename).'"';
57  // metaflac works fine if you copy-paste the above commandline into a command prompt,
58  // but refuses to work with `backtick` if there are "doublequotes" present around BOTH
59  // the metaflac pathname and the target filename. For whatever reason...??
60  // The solution is simply ensure that the metaflac pathname has no spaces,
61  // and therefore does not need to be quoted
62 
63  // On top of that, if error messages are not always captured properly under Windows
64  // To at least see if there was a problem, compare file modification timestamps before and after writing
65  clearstatcache();
66  $timestampbeforewriting = filemtime($this->filename);
67 
68  $commandline = GETID3_HELPERAPPSDIR.'metaflac.exe --no-utf8-convert --remove-all-tags --import-tags-from='.escapeshellarg($tempcommentsfilename).' '.escapeshellarg($this->filename).' 2>&1';
69  $metaflacError = `$commandline`;
70 
71  if (empty($metaflacError)) {
72  clearstatcache();
73  if ($timestampbeforewriting == filemtime($this->filename)) {
74  $metaflacError = 'File modification timestamp has not changed - it looks like the tags were not written';
75  }
76  }
77  } else {
78  $metaflacError = 'metaflac.exe not found in '.GETID3_HELPERAPPSDIR;
79  }
80 
81  } else {
82 
83  // It's simpler on *nix
84  $commandline = 'metaflac --no-utf8-convert --remove-all-tags --import-tags-from='.escapeshellarg($tempcommentsfilename).' '.escapeshellarg($this->filename).' 2>&1';
85  $metaflacError = `$commandline`;
86 
87  }
88 
89  // Remove temporary comments file
90  unlink($tempcommentsfilename);
91  ignore_user_abort($oldignoreuserabort);
92 
93  if (!empty($metaflacError)) {
94 
95  $this->errors[] = 'System call to metaflac failed with this message returned: '."\n\n".$metaflacError;
96  return false;
97 
98  }
99 
100  return true;
101  }
CleanmetaflacName($originalcommentname)
$key
Definition: croninfo.php:18
+ Here is the call graph for this function:

Field Documentation

◆ $errors

getid3_write_metaflac::$errors = array()

Definition at line 24 of file write.metaflac.php.

◆ $filename

getid3_write_metaflac::$filename

Definition at line 21 of file write.metaflac.php.

◆ $tag_data

getid3_write_metaflac::$tag_data

Definition at line 22 of file write.metaflac.php.

◆ $warnings

getid3_write_metaflac::$warnings = array()

Definition at line 23 of file write.metaflac.php.


The documentation for this class was generated from the following file: