To get Perl-like behavior, the simplest path appears to be:
Instead of the simple "vV" it would be in Perl, you give each format code a unique name and separate them with slashes. You have to provide a name and not an index because PHP interprets a number as the repeat count. There's nowhere to place an index in the unpack format. Then,
<?php list(...) = array_values(unpack("vlen/Vcrc", $header)); ?>
array_values()gives you back the items in the order specified in the unpack string, since PHP associative arrays maintain their ordering. Finally, the field names must be unique, or else unpack will happily overwrite them.
If you try to use "vV" as the format code, there will only be one value unpacked... named "V". If you try "v/V", there will be second value... at index 1, where it overwrote the first value.
If you're unpacking just one value, you might try to write
list($x) = unpack(...)but this won't work—pack inexplicably returns a 1-based array. PHP will generate a notice that index 0 doesn't exist and assign NULL to $x.