PHP はファイル配列とともに適当なエラーコードを返します。 エラーコードは、PHP によるファイルアップロードの間に生成され、 ファイル配列の['error'] 要素で アクセス可能です。言い換えると、エラーは、 $_FILES['userfile']['error'] でアクセス可能でしょう。
UPLOAD_ERR_OK
値: 0; エラーはなく、ファイルアップロードは成功しています。
UPLOAD_ERR_INI_SIZE
値: 1; アップロードされたファイルは、php.ini の upload_max_filesize ディレクティブの値を超えています。
UPLOAD_ERR_FORM_SIZE
値: 2; アップロードされたファイルは、HTML フォームで指定された MAX_FILE_SIZE を超えています。
UPLOAD_ERR_PARTIAL
値: 3; アップロードされたファイルは一部のみしかアップロードされていません。
UPLOAD_ERR_NO_FILE
値: 4; ファイルはアップロードされませんでした。
UPLOAD_ERR_NO_TMP_DIR
値: 6; テンポラリフォルダがありません。PHP 5.0.3 で導入されました。
UPLOAD_ERR_CANT_WRITE
値: 7; ディスクへの書き込みに失敗しました。PHP 5.1.0 で導入されました。
UPLOAD_ERR_EXTENSION
値: 8; PHP の拡張モジュールがファイルのアップロードを中止しました。 どの拡張モジュールがファイルアップロードを中止させたのかを突き止めることはできません。 読み込まれている拡張モジュールの一覧を phpinfo() で取得すれば参考になるでしょう。 PHP 5.2.0 で導入されました。