Вы не можете в своей функции javascript / ajax использовать имя функции PHP в качестве URL-адреса или цели запроса, поэтому это не будет работать:
$.ajax({
url:"<?php upload();?>", // or anything similar
method :"POST"
/* etc */
Однако вы можете использовать один PHPфайл для обработки нескольких различных запросов AJAX и разветвления логики на основе некоторого параметра, отправленного в запросе.
Например, добавьте в запрос новый параметр с именем "action"
- присвойте ему уникальное значение
var form_data = new FormData();
form_data.append("file", property );
form_data.append("action","xhr-upload-image");
/* ... rest of ajax code ... */
В сценарии PHP для обработки запросов AJAX:
<?php
if( $_SERVER['REQUEST_METHOD']=='POST' ){
$action=filter_input( INPUT_POST, 'action', FILTER_SANITIZE_STRING );
if( $action ){
switch( $action ){
case 'xhr-file-upload':
upload(); // here you can call a specific PHP function
break;
case 'std-file-upload':/* code */break;
case 'add-hot-water':/* code */break;
}
} else {
exit('Missing action');
}
}
?>
Если, однако, цель состоит в том, чтобы использовать одну функцию для обработки различных загрузок (например, изменить разрешенные типы файлов, размер, местоположение и т. Д.)) затем либо напишите функцию, принимающую аргументы для этих переменных, либо напишите класс и вызовите его с другими свойствами.
function upload($path,$maxsize,$types=array(),$rename){
....
}
или
class uploadfile{
private $options;
public function __construct( $options=array() ){
$this->options=(object)array_merge( array(
'fieldname' => 'usrfile',
'rename' => false,
'path' => 'uploads/',
'size' => abs( pow( 1024, 2 ) * 2 ),
'types' => ['jpg','png'],
'enforcetype' => true,
'enforcesize' => true
), $options );
}
public function upload(){
try{
$errors=array();
$obj=(object)$_FILES[ $this->options->fieldname ];
$tmp=$obj->tmp_name;
$name=$obj->name;
$size=$obj->size;
$ext=pathinfo( $name, PATHINFO_EXTENSION );
if( !is_uploaded_file( $tmp ) )$errors[]='Bad foo!';
if( $this->options->enforcetype && !in_array( $ext, $this->options->types ) )$errors[]='bad file type';
if( $this->options->enforcesize && $size >= $this->options->size )$errors[]='too large';
/* etc */
if( empty( $errors ) ){
$status=move_uploaded_file( $tmp, $this->options->path . $name );
return json_encode( array(
'name' => $name,
'path' => $this->options->path,
'size' => $size,
'status' => $status
));
}
throw new Exception('Errors detected');
}catch( Exception $e ){
array_unshift( $e->getMessage() );
exit( json_encode( $errors ) );
}
}
}
, а затем в сценарии upload.php
- или как называется ваш обработчик ajax:
if( $action ){
switch( $action ){
case 'xhr-file-upload':
$obj=new uploadfile(array(
'fieldname' => 'file',
'path' => 'uploads/images/',
'types' => ['jpg','png','gif'],
'enforcetype' => true,
'enforcesize' => false
));
exit( $obj->upload() );
break;
case 'xhr-pdf-upload':
$obj=new uploadfile(array(
'fieldname' => 'file',
'path' => 'uploads/pdf/',
'types' => ['pdf'],
'enforcetype' => true,
'enforcesize' => false
));
exit( $obj->upload() );
break;
}
}
Примечание: ни один код не был отлажен / протестирован! Надеюсь, что это поможет вам хоть что-то осветить.