Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
文件上载不起作用的Drupal 6节点创建PHP脚本_Php_Drupal_Drupal 6_File_Upload - Fatal编程技术网

文件上载不起作用的Drupal 6节点创建PHP脚本

文件上载不起作用的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, $

我有一个PHP脚本,用于将工资存根导入Drupal。除了脚本没有将上传的PDF文件附加到节点之外,它正在以我想要的方式执行所有操作

一些注释;Drupal的文件系统设置为private,不确定这是否会产生影响。其次,pdf文件已经位于正确的位置“paystubs/[uid]/paystub_1.pdf”,因此我认为我的问题是该文件与节点的关联不正确

这是代码

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); }
再次感谢berkes

gah,你能详细说明/让我开始调用文件保存上传吗。我试图调用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);