NOOO deberías usar como globales las variables de tu formualrio donde tienes tu campo "file" de nombre "name=userfile" .. Eso no es nada seguro ..
De todas formas .. lo que hace falta en tu caso para "fread()" o "fopen()" es que le des una ruta de tu archivo que subió por HTTP. PHP almacenta temporalmente todo archivo que sube en cierto directorio (lo define en tu php.ini: upload_tmp_dir) .. y queda dicha ruta + nombre aletario que le dá PHP en $nombrearchivo_tmp_name .. o mejor usado en:
$_FILES['nombrearchivo']['tmp_name']
Sería en tu caso ..
$x=addslashes(fread(fopen($userfile_tmp_name,"r"), filesize($userfile_tmp_name)));
Si quieres ver un ejemplo completo usando los "arrays superglobales" puedes ver este mini-tutorial al respecto:
http://www.forosdelweb.com/f18/tutorial-ejemplo-subir-archivos-bd-guardando-bd-binario-127775/
Cuando solventes ese detalle .. puede ser que tengas otros problemas asociados a restricciones de "open_base_dir" .. NO toda configuración de servicios de hosting permiten hacer un "fopen()" directo a ese directorio que queda fuera del alcance de tu sitio asignado . .En ese caso tendrías que mover temporalmente tu archivo con move_uploaded_file() hacia un directorio de tu sitio .. de ahí aplicar el fopen() desde esa ruta y cuando termines .. borrar ese archivo "temporal" con unlink().
Teóricamente . .así deberíamos hacerlo para evitar problemas con ese tipo de restricciones de configuración ...
Un saludo,