prova così:
$upload_dir = "http://".$_SERVER['DOCUMENT_ROOT']."/public/upload";