gpt4 book ai didi

php - 是否可以模仿或将文件 url 传递给 $_Files?

转载 作者:行者123 更新时间:2023-12-04 19:25:40 26 4
gpt4 key购买 nike

我需要修改其他人为我们定制的应用程序。
该应用程序从表单中接受一个文件(.ydk 类型),然后将其上传到 WordPress(同时读取其内容)。我想修改它,以便它也可以从服务器读取 .ydk 文件。

我把它缩小到以下几点:

if($_FILES['deckFile']){
$attachment_ydk_id = upload_ydk_file($_FILES['deckFile']);
}

然后它使用的功能:
//Upload ydk file
function upload_ydk_file( $file = array() ) {
require_once( ABSPATH . 'wp-admin/includes/admin.php' );
$file_return = wp_handle_upload( $file, array('test_form' => false ) );
if( isset( $file_return['error'] ) || isset( $file_return['upload_error_handler'] ) ) {
return false;
} else {
$filename = $file_return['file'];
$attachment = array(
'post_mime_type' => $file_return['type'],
'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
'post_content' => '',
'post_status' => 'inherit',
'guid' => $file_return['url']
);
$attachment_id = wp_insert_attachment( $attachment, $file_return['url'] );
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attachment_data = wp_generate_attachment_metadata( $attachment_id, $filename );
wp_update_attachment_metadata( $attachment_id, $attachment_data );
if( 0 < intval( $attachment_id ) ) {
return $attachment_id;
}
}
return false;
}

所以我看待它的方式。 $_Files需要,因为它正在使用 wp_handle_upload我认为这需要 $_Files大批。

我试过 fopenfile()因此,但没有运气:
    $attachment_ydk_id = upload_ydk_file(fopen("location_of_file.ydk", "r"));

编辑:第一次尝试

我现在尝试了以下操作(试图重新创建 $_Files):
$urls = 'YGOPRO_Decks/user_decks/58535.ydk';

$size = filesize($urls);
$info = pathinfo($urls);
$info_basename = $info['basename'];
$info_mime = 'application/octet-stream';

$UrlArray = array(
'name' => $info_basename,
'type' => $info_mime,
'tmp_name' => 'YGOPRO_Decks/user_decks/58535.ydk',
'error' => 0,
'size' => $size
);


if($_FILES['deckFile']){
$attachment_ydk_id = upload_ydk_file($UrlArray);
}

该文件存在于指定位置。一个 print_r在数组上给出:
 Array
(
[name] => 58535.ydk
[type] => application/octet-stream
[tmp_name] => YGOPRO_Decks/user_decks/58535.ydk
[error] => 0
[size] => 576
)

不幸的是仍然没有运气。这似乎是一个非常好的方法,我以为我正在做某事,但它继续失败。

最佳答案

通过为 $_FILES 创建自己的数组,您走上了正确的道路。 .要继续,请尝试将“假文件”添加到全局中,如下所示:

$urls = 'YGOPRO_Decks/user_decks/58535.ydk';

$size = filesize($urls);
$info = pathinfo($urls);
$info_basename = $info['basename'];
$info_mime = 'application/octet-stream';

$UrlArray = array(
'name' => $info_basename,
'type' => $info_mime,
'tmp_name' => 'YGOPRO_Decks/user_decks/58535.ydk',
'error' => 0,
'size' => $size
);

$_FILES[$info_basename] = $UrlArray;

if(!empty($_FILES)) {
$attachment_ydk_id = upload_ydk_file($UrlArray);
}

这应该会诱使 WP 认为实际文件已上传。

关于php - 是否可以模仿或将文件 url 传递给 $_Files?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58094847/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com