文件上载不起作用的Drupal 6节点创建PHP脚本
我有一个PHP脚本,用于将工资存根导入Drupal。除了脚本没有将上传的PDF文件附加到节点之外,它正在以我想要的方式执行所有操作 一些注释;Drupal的文件系统设置为private,不确定这是否会产生影响。其次,pdf文件已经位于正确的位置“paystubs/[uid]/paystub_1.pdf”,因此我认为我的问题是该文件与节点的关联不正确 这是代码文件上载不起作用的Drupal 6节点创建PHP脚本,php,drupal,drupal-6,file,upload,Php,Drupal,Drupal 6,File,Upload,我有一个PHP脚本,用于将工资存根导入Drupal。除了脚本没有将上传的PDF文件附加到节点之外,它正在以我想要的方式执行所有操作 一些注释;Drupal的文件系统设置为private,不确定这是否会产生影响。其次,pdf文件已经位于正确的位置“paystubs/[uid]/paystub_1.pdf”,因此我认为我的问题是该文件与节点的关联不正确 这是代码 function create_drupal_node($employeeID, $employeeDate, $drupalUid, $
function create_drupal_node($employeeID, $employeeDate, $drupalUid, $file2) {
$sourcePDF = "/var/www/html/mgldev.************.com/burst_pdfs/pdfs/" . $file2;
$destinationPDF = '/paystubs/' . $drupalUid . '/' . $file2;
$destination = '/paystubs/' . $drupalUid . '/';
if (!file_check_directory($destination, TRUE)){
echo "Failed to check dir, does it exist?";
mkdir($destination);
echo "trying to drupal mkdir...";
}
// Copy the file to the Drupal files directory
if (file_exists($sourcePDF)) {
if(!rename($sourcePDF, $destinationPDF)) {
echo "Failed to move file\n";
}
}
//Create node and attach file uplaod
$file_drupal_path = "paystubs/" . $drupalUid . "/" . $file2;
$mime = 'pdf/application';
$file = new stdClass();
$file->filename = $file2;
$file->filepath = $file_drupal_path;
$file->filemime = $mime;
$file->filesize = filesize($file_drupal_path);
$file->uid = $drupalUid;
$file->status = FILE_STATUS_PERMANENT;
$file->timestamp = time();
drupal_write_record('files', $file);
$node = new StdClass();
$node->type = 'paystub';
$node->body = $employeeID;
$node->title = $employeeDate;
$node->field_paystub_upload = array(
array(
'fid' => $file->fid,
'title' => $file2,
'filename' => $file->filename,
'filepath' => $file->filepath,
'filesize' => $file->filesize,
'mimetype' => $mime,
'data' => array(
'description' => $file2,
),
'list' => 1,
),
);
$node->uid = $drupalUid;
$node->status = 1;
$node->active = 1;
$node->promote = 1;
node_save($node);
}
将创建节点,并且节点的标题和正文具有正确的值。当我使用Devel模块查看节点时,我可以看到“field\u paystub\u upload”数组为空。因此,出于某种原因,除了将文件附加到节点之外,它做的一切都是正确的,这就是我几天来一直在努力的事情。在免费互联网上获得最佳回应 Drupal的file.inc使用$\u文件
,这是一个。Drupal需要上传的文件,而不是本地存在的文件
您最好只调用一个自定义文件保护程序方法来处理本地文件。确保其路径也在文件
数据库表中向上。将对创建这样一个助手方法很有价值。Drupal的file.inc使用$\u文件
,这是一个。Drupal需要上传的文件,而不是本地存在的文件
您最好只调用一个自定义文件保护程序方法来处理本地文件。确保其路径也在文件
数据库表中向上。将对创建这样一个助手方法很有价值。非常感谢您帮助我解决这个问题。事实证明,由于文件已经在drupal Web服务器上,并且没有上载到PHP$\u files全局变量,因此我无法以编程方式正确上载文件
这导致了我尝试过的所有其他方法都失败了。我试过使用Drupals defualt上传模块,也试过使用CCK的fielfield模块,但都不起作用。多亏了berkes的建议,我发现CCK的filefield小部件附带了一个功能,可以保存服务器上已经上传的文件。希望这能帮助其他人
我发现它可以保存web服务器上已有的文件
下面是我用来创建节点并在调用field\u file\u save\u file后附加文件的工作代码
}
//加载CCK字段
$field=content_fields('field_paystub_upload','paystub');
//加载适当的验证器
$validators=array_merge(filefield_widget_upload_validators($field));
//创建文件对象
$file=field\u file\u save\u file($file、$validators、$dest\u folder);
//将文件应用于字段,这将仅设置第一个文件,可以循环
//如果有更多的文件
$node->field\u paystub\u upload=array(0=>$file);
//文件已复制到相应的目录中,因此可以
//从导入目录中删除
取消链接($文件);
//将文件状态更改为永久
文件设置状态($file,1);
节点\保存($node);
}
再次感谢berkes,非常感谢你帮我解决了这个问题。事实证明,由于文件已经在drupal Web服务器上,并且没有上载到PHP$\u files全局变量,因此我无法以编程方式正确上载文件
这导致了我尝试过的所有其他方法都失败了。我试过使用Drupals defualt上传模块,也试过使用CCK的fielfield模块,但都不起作用。多亏了berkes的建议,我发现CCK的filefield小部件附带了一个功能,可以保存服务器上已经上传的文件。希望这能帮助其他人
我发现它可以保存web服务器上已有的文件
下面是我用来创建节点并在调用field\u file\u save\u file后附加文件的工作代码
}
//加载CCK字段
$field=content_fields('field_paystub_upload','paystub');
//加载适当的验证器
$validators=array_merge(filefield_widget_upload_validators($field));
//创建文件对象
$file=field\u file\u save\u file($file、$validators、$dest\u folder);
//将文件应用于字段,这将仅设置第一个文件,可以循环
//如果有更多的文件
$node->field\u paystub\u upload=array(0=>$file);
//文件已复制到相应的目录中,因此可以
//从导入目录中删除
取消链接($文件);
//将文件状态更改为永久
文件设置状态($file,1);
节点\保存($node);
}
再次感谢berkesgah,你能详细说明/让我开始调用文件保存上传吗。我试图调用file_save_upload,该文件在原始代码中被重命名,但工作不正常。好的,我找到了这个链接,看起来它可能接近我的解决方案,但我仍然不清楚它到底应该如何插入到我的节点保存函数中。对不起,在你的问题之后,我重新阅读了我的答案,发现我没有明确指出文件保存上传本身是不可用的,相反,你应该创建自己的文件保存上传(),它使用磁盘上的文件而不是$文件。gah,你能详细说明/让我开始调用文件保存上传吗。我试图调用file_save_upload,该文件在原始代码中被重命名,但工作不正常。好的,我找到了这个链接,看起来它可能接近我的解决方案,但我仍然不清楚它到底应该如何插入到我的节点保存函数中。对不起,在你的问题之后,我重新阅读了我的答案,发现我没有明确指出文件\u save\u upload本身无法使用,相反,你应该创建自己的“我的文件”\u save\u upload(),它使用磁盘上的文件,而不是使用$\u文件。您好,我能问一下您是如何调用该函数的吗?您是否创建了一个模块来处理这个问题,或者这是一个在某个时候调用Drupal引导的自定义脚本?(我正在尝试做一些类似的事情,这将是有益的发现)嗨,胡斯-我可以问一下吗
function create_drupal_node($employeeID, $employeeDate, $drupalUid, $file2){
$file_remove_html_extention = substr($file2, 0, -7);
$file_pdf = $file_remove_html_extention . '.pdf';
$node = new stdClass();
$node->type = 'paystub';
$node->status = 1;
$node->uid = $drupalUid;
$node->title = $employeeDate . ' - eStub';
$node->body = $employeeID;
$node->created = time();
$node->changed = $node->created;
$node->promote = 1;
$node->sticky = 0;
$node->format = 1;
$node->language = 'en';
$file = '/var/www/html/mgldev.foobar.com/burst_pdfs/pdfs/' . $file_pdf;
// Get the path to your Drupal site's files directory
$dest_folder = '/paystubs/' . $drupalUid;
$dest = 'paystubs/' . $drupalUid . '/' . $file_pdf;
if (!file_check_directory($dest_folder, TRUE)){
mkdir($dest_folder);