At work, I've inherited a web application that has a file upload process. Part of this process occasionally (once every two weeks or so) triggers the following error:
PHP Warning: mkdir(): File exists in {{{file_path_name_redacted}}} on line 7
Looking at lines 6-8, gives us:
if(!is_dir($storeFolder)){
mkdir($storeFolder, 0644, TRUE);
}
Given this file can be hit by multiple PHP processes, I believe race conditions may be coming into play here. I've seen the same problem on other sites that I've managed in the past, similarly occurring only once in a blue moon.
What I believe is happening is that users are double-clicking on the upload button, which causes two PHP processes to execute at almost exactly the same time, like this:
Process 1 executes line 6 - dir does not exist
Process 2 executes line 6 - dir does not exist
Process 1 executes line 7 - directory is created
Process 2 executes line 7 - directory cannot be created as it already exists
Is this a case of race conditions, as I explained above (i.e. has anyone else noticed this), and/or is there some way of mitigating the error other turning off error reporting for warnings?
file_exists()
as well, otherwise if$storeFolder
exists as a file (rather than a directory), thenis_dir()
willl validly return false, butmkdir()
will fail – Supranatural