コード例 #1
0
 function array_join_merge($arr1, $arr2)
 {
     // written by dev-null@christophe.vg
     // taken from http://www.php.net/manual/en/function.array-merge-recursive.php
     if (is_array($arr1) && is_array($arr2)) {
         // the same -> merge
         $new_array = array();
         if (is_hash($arr1) && is_hash($arr2)) {
             // hashes -> merge based on keys
             $keys = array_merge(array_keys($arr1), array_keys($arr2));
             foreach ($keys as $key) {
                 $new_array[$key] = array_join_merge(@$arr1[$key], @$arr2[$key]);
             }
         } else {
             // two real arrays -> merge
             $new_array = array_reverse(array_unique(array_reverse(array_merge($arr1, $arr2))));
         }
         return $new_array;
     } else {
         // not the same ... take new one if defined, else the old one stays
         return $arr2 ? $arr2 : $arr1;
     }
 }
コード例 #2
0
ファイル: guppy.php プロジェクト: rmaiwald/Scribite
 function setActionEnabling($componentName, $actions)
 {
     $this->data[$componentName]['actions'] = array_join_merge($this->data[$componentName]['actions'], $actions);
 }
コード例 #3
0
function WriteID3v2($filename, $data, $majorversion = 4, $minorversion = 0, $overwrite = FALSE, $paddedlength = 0, $showerrors = FALSE)
{
    // File MUST be writeable - CHMOD(646) at least. It's best if the
    // directory is also writeable, because that method is both faster and less susceptible to errors.
    if (is_writeable($filename) || !file_exists($filename) && is_writeable(dirname($filename))) {
        $OldMP3fileInfo = GetAllMP3info($filename);
        if ($overwrite) {
            // ignore previous data
        } else {
            // merge with existing data
            $data = array_join_merge($OldMP3fileInfo, $data);
            $paddedlength = max($OldMP3fileInfo['id3']['id3v2']['headerlength'], $paddedlength);
        }
        if ($NewID3v2Tag = GenerateID3v2Tag($data['id3']['id3v2'], $majorversion, $minorversion, $paddedlength, '', FALSE, $showerrors, TRUE)) {
            if (!file_exists($filename) && is_writeable(dirname($filename)) || is_writeable($filename) && $OldMP3fileInfo['id3']['id3v2']['headerlength'] == strlen($NewID3v2Tag)) {
                // best and fastest method - insert-overwrite existing tag (padded to length of old tag if neccesary)
                if (file_exists($filename)) {
                    if ($fp = @fopen($filename, 'r+b')) {
                        rewind($fp);
                        fwrite($fp, $NewID3v2Tag, strlen($NewID3v2Tag));
                        fclose($fp);
                    } else {
                        $error .= 'Could not open ' . $filename . ' mode "r+b"<BR>';
                    }
                } else {
                    if ($fp = @fopen($filename, 'wb')) {
                        rewind($fp);
                        fwrite($fp, $NewID3v2Tag, strlen($NewID3v2Tag));
                        fclose($fp);
                    } else {
                        $error .= 'Could not open ' . $filename . ' mode "wb"<BR>';
                    }
                }
            } else {
                // new tag is longer than old tag - must rewrite entire file
                if (is_writeable(dirname($filename))) {
                    // preferred alternate method - only one copying operation, minimal chance of corrupting
                    // original file if script is interrupted, but required directory to be writeable
                    if ($OldMP3fileInfo['audiobytes'] > 0) {
                        if ($fp_source = @fopen($filename, 'rb')) {
                            rewind($fp_source);
                            if ($OldMP3fileInfo['audiodataoffset'] !== FALSE) {
                                fseek($fp_source, $OldMP3fileInfo['audiodataoffset'], SEEK_SET);
                            }
                            if ($fp_temp = @fopen($filename . 'getid3tmp', 'wb')) {
                                fwrite($fp_temp, $NewID3v2Tag, strlen($NewID3v2Tag));
                                // while (($buffer = fread($fp_source, FREAD_BUFFER_SIZE)) !== FALSE) {
                                while ($buffer = fread($fp_source, FREAD_BUFFER_SIZE)) {
                                    fwrite($fp_temp, $buffer, strlen($buffer));
                                }
                                fclose($fp_temp);
                            } else {
                                $error .= 'Could not open ' . $filename . 'getid3tmp mode "wb"<BR>';
                            }
                            fclose($fp_source);
                        } else {
                            // no previous audiodata
                            if ($fp_temp = @fopen($filename . 'getid3tmp', 'wb')) {
                                fwrite($fp_temp, $NewID3v2Tag, strlen($NewID3v2Tag));
                                fclose($fp_temp);
                            }
                        }
                    } else {
                        $error .= 'Could not open ' . $filename . ' mode "rb"<BR>';
                    }
                    if (file_exists($filename)) {
                        unlink($filename);
                    }
                    rename($filename . 'getid3tmp', $filename);
                } else {
                    // less desirable alternate method - double-copies the file, overwrites original file
                    // and could corrupt source file if the script is interrupted or an error occurs.
                    if ($fp_source = @fopen($filename, 'rb')) {
                        rewind($fp_source);
                        if ($OldMP3fileInfo['audiodataoffset'] !== FALSE) {
                            fseek($fp_source, $OldMP3fileInfo['audiodataoffset'], SEEK_SET);
                        }
                        if ($fp_temp = tmpfile()) {
                            fwrite($fp_temp, $NewID3v2Tag, strlen($NewID3v2Tag));
                            // while (($buffer = fread($fp_source, FREAD_BUFFER_SIZE)) !== FALSE) {
                            while ($buffer = fread($fp_source, FREAD_BUFFER_SIZE)) {
                                fwrite($fp_temp, $buffer, strlen($buffer));
                            }
                            fclose($fp_source);
                            if ($fp_source = @fopen($filename, 'wb')) {
                                rewind($fp_temp);
                                // while (($buffer = fread($fp_temp, FREAD_BUFFER_SIZE)) !== FALSE) {
                                while ($buffer = fread($fp_temp, FREAD_BUFFER_SIZE)) {
                                    fwrite($fp_source, $buffer, strlen($buffer));
                                }
                                fseek($fp_temp, -128, SEEK_END);
                                fclose($fp_source);
                            } else {
                                $error .= 'Could not open ' . $filename . ' mode "wb"<BR>';
                            }
                            fclose($fp_temp);
                        } else {
                            $error .= 'Could not create tmpfile()<BR>';
                        }
                    } else {
                        $error .= 'Could not open ' . $filename . ' mode "rb"<BR>';
                    }
                }
            }
        } else {
            $error .= 'GenerateID3v2Tag() failed<BR>';
        }
        if ($error) {
            if ($showerrors) {
                echo $error;
            }
            return FALSE;
        } else {
            return TRUE;
        }
    } else {
        return FALSE;
    }
}
コード例 #4
0
function WriteID3v2($filename, $data, $majorversion = 3, $minorversion = 0, $overwrite = false, $paddedlength = 4096, $showerrors = true)
{
    // File MUST be writeable - CHMOD(646) at least. It's best if the
    // directory is also writeable, because that method is both faster and less susceptible to errors.
    $error = '';
    if (is_writeable($filename) || !file_exists($filename) && is_writeable(dirname($filename))) {
        $OldThisfileInfo = GetAllFileInfo($filename);
        if ($overwrite) {
            // ignore previous data
        } else {
            // merge with existing data
            $data = array_join_merge($OldThisfileInfo, $data);
            $paddedlength = max($OldThisfileInfo['id3v2']['headerlength'], $paddedlength);
        }
        if ($NewID3v2Tag = GenerateID3v2Tag($data['id3v2'], $majorversion, $minorversion, $paddedlength, '', false, $showerrors, true)) {
            if (!file_exists($filename) && is_writeable(dirname($filename)) || is_writeable($filename) && isset($OldThisfileInfo['id3v2']['headerlength']) && $OldThisfileInfo['id3v2']['headerlength'] == strlen($NewID3v2Tag)) {
                // best and fastest method - insert-overwrite existing tag (padded to length of old tag if neccesary)
                if (file_exists($filename)) {
                    ob_start();
                    if ($fp = fopen($filename, 'r+b')) {
                        rewind($fp);
                        fwrite($fp, $NewID3v2Tag, strlen($NewID3v2Tag));
                        fclose($fp);
                    } else {
                        $error .= 'Could not open ' . $filename . ' mode "r+b" - ' . strip_tags(ob_get_contents()) . '<BR>';
                    }
                    ob_end_clean();
                } else {
                    ob_start();
                    if ($fp = fopen($filename, 'wb')) {
                        rewind($fp);
                        fwrite($fp, $NewID3v2Tag, strlen($NewID3v2Tag));
                        fclose($fp);
                    } else {
                        $error .= 'Could not open ' . $filename . ' mode "wb" - ' . strip_tags(ob_get_contents()) . '<BR>';
                    }
                    ob_end_clean();
                }
            } else {
                if ($tempfilename = tempnam('/tmp', 'getID3')) {
                    ob_start();
                    if ($fp_source = fopen($filename, 'rb')) {
                        if ($fp_temp = fopen($tempfilename, 'wb')) {
                            fwrite($fp_temp, $NewID3v2Tag, strlen($NewID3v2Tag));
                            rewind($fp_source);
                            if (!empty($OldThisfileInfo['avdataoffset'])) {
                                fseek($fp_source, $OldThisfileInfo['avdataoffset'], SEEK_SET);
                            }
                            while ($buffer = fread($fp_source, FREAD_BUFFER_SIZE)) {
                                fwrite($fp_temp, $buffer, strlen($buffer));
                            }
                            fclose($fp_temp);
                            fclose($fp_source);
                            copy($tempfilename, $filename);
                            unlink($tempfilename);
                            return true;
                        } else {
                            $error .= 'Could not open ' . $tempfilename . ' mode "wb" - ' . strip_tags(ob_get_contents()) . '<BR>';
                        }
                        fclose($fp_source);
                    } else {
                        $error .= 'Could not open ' . $filename . ' mode "rb" - ' . strip_tags(ob_get_contents()) . '<BR>';
                    }
                    ob_end_clean();
                }
                if ($error) {
                    if ($showerrors) {
                        echo $error;
                    }
                }
                return false;
            }
        } else {
            $error .= 'GenerateID3v2Tag() failed<BR>';
        }
        if ($error) {
            if ($showerrors) {
                echo $error;
            }
            return false;
        }
        return true;
    }
    return false;
}