我有点奇怪的问题,但希望有人知道是什么情况。
我从git克隆了项目并开始在PHPStorm中使用它,在我的本地Apache服务器上运行它。所以它第一次工作,但在我的下一次尝试中,脚本没有响应。重启Apache没有帮助,因为在IDE中重新运行脚本也是如此。浏览器控制台/资源中没有任何信息。
我已经确定这是标题中的问题,并重写了脚本:
$fileInputName = 'uploadedFile';
if ( !array_key_exists( $fileInputName, $_FILES ) ) {
echo ('there are no files to work with');
die();
}
$uploadName = $_FILES[$fileInputName]['tmp_name'];
$size = $_FILES[$fileInputName]['size'];
$pathToSaveSVG = realpath(dirname(__FILE__)) . '/SVG';
$fileName = $uploadName . '.pdf';
$targetName = $fileName . '.svg';
if ( !move_uploaded_file( $uploadName, $fileName ) ) {
echo ($uploadName. ' '. $fileName);
unlink( $uploadName );
echo( 'can\'t move uploaded file' );
die();
}
exec( 'pdf2svg ' . escapeshellarg( $fileName ) . ' ' . escapeshellarg( $pathToSaveSVG. '/' . $targetName ) );
unlink($fileName);
echo $pathToSaveSVG . '/' . $targetName;
die;
html:
<form action="pdf_to_svg.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
<input type="file" name="uploadedFile" id="file" accept="application/pdf" />
<input type="submit" name="submit" value="Convert " />
</form>
然后,它重复。如果我只是按文件转换文件而不是通过POST数据发送,脚本工作正常。
请提供任何提示,为什么通过POST方法发送数据会在第二次工作时崩溃脚本?它看起来像服务器端的循环转发或其他东西,但没有可见的错误,也在apache日志中。
ADD:看起来与权限有关。第一次,文件上传错误3 - 文件已部分上传。我试过chmod 755 -R ./SVG
,没有结果。有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
请确保您的文件上传表单包含属性enctype="multipart/form-data"
,否则文件上传可能无法正常运行。
确保将memory_limit设置得足够大。
确保将max_execution_time设置得足够大。
确保将post_max_size设置得足够大。
检查核心价值:
phpinfo();
限定上传没有错误并且具有正确的内容MIME类型
if( is_uploaded_file($_FILES['uploadedFile']['tmp_name']) || !($_FILES['uploadedFile']['error'] !== UPLOAD_ERR_OK) && strtolower($_FILES['uploadedFile']['type']) == 'application/pdf' )){
获取exec的返回状态:
$status = exec(...);
echo "<p>$status</p>";
确保目标路径和文件名正确无误。
if (file_exists($fileName ) && file_exists($pathToSaveSVG)){
答案 1 :(得分:0)
找到答案。
当文件上传到服务器时,apache会尝试将文件放入临时目录,如/var/tmp
。 www-data
有权在该目录中读写,这就是我被困的原因。
我的项目不在/var/www
,我用PhpStorm工具运行它。我想知道,为什么它不起作用 - www-data
组拥有项目文件夹和临时文件夹的所有权限。但后来,我尝试了我的剧本
echo exec('whoami');
它返回的不是www-data,而是我的用户名。我只是更改了/etc/group
文件
www-data:x:33
到
www-data:x:33:myUserName
现在可行。