Hm... Versuch mal, den gescheiterten Befehl auszugeben
# … wie vor.
$sys = 'zip'
. ' ' . escapeshellarg( $zip_name )
. ' -0 -j -v'
. ' ' . escapeshellarg( $zip_target )
;
# /* Debug:
echo '<pre>' . $sys . '</pre>';
exit;
# */
$fp = popen( $sys, 'r' );
# … wie vor.
Wenn die Ausgabe Deinen Erwartungen entspricht, dann schalte das Debuggen wieder ab. Ändere dazu # /* Debug:
zu /* Debug: