首次上传文件后,PHP脚本无法正常工作

时间:2015-01-17 23:33:52

标签: php apache localhost

我有点奇怪的问题,但希望有人知道是什么情况。

我从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,没有结果。有人可以帮我解决这个问题吗?

2 个答案:

答案 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/tmpwww-data有权在该目录中读写,这就是我被困的原因。 我的项目不在/var/www,我用PhpStorm工具运行它。我想知道,为什么它不起作用 - www-data组拥有项目文件夹和临时文件夹的所有权限。但后来,我尝试了我的剧本

echo exec('whoami');

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

www-data:x:33

www-data:x:33:myUserName

现在可行。