Короче говоря, проанализировав твой(Павлова) код и симптомы Апач, я пришел к выводу, что баг в этих местах:
...
foreach(@parts){
($header,$body)=split(/\\n\\s*\\n/,$_,2);
($name)=(/name=\\"([^\\"]*)\\"/); - - - - - лажа
$body=~s/\\n$//;
$body=~s/\\r$//;
($filename)=(/filename\\"([^\\"]*)\\"/); - - - - - лажа
...
попробуй ($name) = ($header =~ /name=\\"?([^"\\]*\\"/);
($filename) = ($header =~ /filename=\\"?([^"\\]*\\"/) соответственно.
Может я и ошибаюсь, но в любом случае используй хотя бы -w.
А вот в конструкции
...
while(-e "$fotodir/$userfilename1"){
$userfilename1="$filedup_$userfilename"; - - - полная лажа
$filedup++;
}
...
правильно будет $userfilename1="$filedup\\_$userfilename";
тут ошибка на 100%, потому как "$filedup_$userfilename" интерпретируеться как "$filedup_"+"$userfilename". Первое у нас - андеф, соответственно мы получаем замкнутый цыкл - потому Апач и виснет.
На первый взгляд болше топорных ошыбок я не встретил.
Удачи!