PHP 脚本在第一个文件上传后不起作用

PHP script doesn't work after first file upload

我遇到了一个奇怪的问题,但希望有人知道是怎么回事。

我已经从 git 克隆了项目并开始在 PHPStorm 中使用它,运行 它在我的本地 Apache 服务器中。所以它是第一次工作,但在我的下一次尝试中,脚本没有响应。重新启动 Apache 没有帮助,因为 IDE 中的 re-run 脚本也是如此。浏览器中没有任何信息 console/resources。

我确定这是 headers 和 re-wrote 脚本中的问题:

$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 方法发送数据会导致脚本在第二次运行时崩溃?它看起来像 server-side 或其他地方的循环转发,但没有可见错误,并且在 apache 日志中也是如此。

ADD:看起来与权限有关。第一次,文件上传错误 3 - 文件已部分上传。我试过 chmod 755 -R ./SVG,没有结果。有人可以帮我解决这个问题吗?

请确保您的文件上传表单具有 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)){

找到答案。 当文件上传到服务器时,apache 尝试将文件放入临时目录,如 /var/tmpwww-data 有权在该目录中读写,这就是我卡住的原因。 我的项目不在 /var/www 中,我使用 PhpStorm 工具 运行 它。我想知道,为什么它不起作用 - www-data 组拥有对项目文件夹和临时文件夹的所有权限。但是后来,我在我的脚本中尝试了

echo exec('whoami');

它返回的不是 www-data,而是我的用户名。我只是更改了 /etc/group 文件

www-data:x:33

www-data:x:33:myUserName

现在可以使用了。