makedir不使用变量,MPDF无法保存

时间:2018-01-29 18:26:07

标签: php pdf

我有一个奇怪的问题,我会尽量保持简短,但这有点令人困惑,所以请原谅...我有相同的MakeDir命令运行几个页面,字面上完全相同的代码,但出于某种原因,某个页面上的代码不起作用......

所以一个简单的分解,我使用下面的代码创建一个目录,如果它还不存在,然后我使用mpdf在该目录中创建一个pdf。但由于某种原因,我无法使用动态变量创建目录...

我的代码:

$directory = ROOT.'/companies/'.$current_document->company_id.'/employees/employee_'.$current_document->employee_id.'/documents/generated/signatures/'.str_replace('.pdf', '', $current_document->file_name).'/';

/*  Create Directories  */
if (!file_exists($directory)) {
   mkdir($directory, 0777, true);
}

上面的代码给了我一个错误Warning: file_exists() expects parameter 1 to be a valid path, string givenWarning: mkdir() expects parameter 1 to be a valid path, string given

但是当我var_dump变量/home/xxxxxxx/public_html/account/companies/2/employees/employee_1233/documents/generated/signatures/LWJiVq9/时,我得到的值,我应该提一下,使用makedir的完整路径代替变量可以完全出于某种原因......

除此之外,代码使用mpdf生成PDF并在此情况下将其置为@ /home/xxxxxxx/public_html/account/companies/2/employees/employee_1233/documents/generated/LWJiVq9.pdf,但在生成mPDF error: Unable to create output file: /home/xxxxxxx/public_html/account/companies/2/employees/employee_1233/documents/generated/LWJiVq9.pdf

时也会出错

我不确定导致它的原因,因为同一个脚本会正确地生成所有其他文档,只有在这种情况下它才会完全炸毁...

任何建议都会很棒:),谢谢你们。

2 个答案:

答案 0 :(得分:0)

而不是 ROOT 提供 __ DIR __ ,并提供相对于脚本退出的目录的路径。

注意

DIR__文件的目录。如果在include中使用,则返回包含文件的目录。这相当于dirname(__ FILE )。除非它是根目录

,否则此目录名称没有尾部斜杠

答案 1 :(得分:0)

好吧,伙计们,经过一个多小时的搜索,我似乎找到了这个问题...... 问题是每次我使用file_name变量(例如1xy.pdf函数file_existsmakedir都会失败,显然mpdf也不会能够创建文件。但是当我把它var_dump出来时,按原样复制并粘贴整个链接,它会起作用......

所以我使用了一个函数从数据库名称字段中删除任何非法字符并且它有效...但是请注意,我还必须再次更新数据库记录,因为由于某种原因,有一个字符在那里不断获取拿起....

我使用的功能是:

function normalizeString ($str = '')
{
    $str = strip_tags($str); 
    $str = preg_replace('/[\r\n\t ]+/', ' ', $str);
    $str = preg_replace('/[\"\*\/\:\<\>\?\'\|]+/', ' ', $str);
    $str = strtolower($str);
    $str = html_entity_decode( $str, ENT_QUOTES, "utf-8" );
    $str = htmlentities($str, ENT_QUOTES, "utf-8");
    $str = preg_replace("/(&)([a-z])([a-z]+;)/i", '$2', $str);
    $str = str_replace(' ', '-', $str);
    $str = rawurlencode($str);
    $str = str_replace('%', '-', $str);
    return $str;
}

我从string sanitizer for filename得到的 希望这将有助于未来的人们挣扎...再次,在数据库和var_dump中都找不到非法字符,但它仍然发生,所以normalizeString是我将继续使用的东西,因为这是非常随机,我建议大家一起来看看。

希望有所帮助