On Jul 2, 2009, at 17:59, Waynn Lue wrote:
The tmp folder isn't accessible from the web though, right? Someone would first have to get access to your server for that. On 7/1/09, Mari Masuda <mbmasuda@xxxxxxxxxxxx> wrote:On Jul 1, 2009, at 12:54, Shawn McKenzie wrote:Mari Masuda wrote:On Jul 1, 2009, at 12:20, Shawn McKenzie wrote:Shawn McKenzie wrote:Mari Masuda wrote:Hello, This is probably a dumb newbie question. I am running PHP 5.2.5 andApache 2.2.8 on my Mac Book Pro OS X 10.4.11. I compiled PHP andApache from source a while ago (as opposed to using the built-in web serverthat is included w/ Mac OS X). I have written the below PHP whosepurpose is to read an existing comma separated (CSV) file and save thedata into a text file that I can later copy and paste from into mywebsite content management system. The problem is that on my Mac, I cannot seem to figure out what permissions I need to set in order tomake the input CSV and the initially non-existant output text filereadable and writable by Apache/PHP. I have Googled and come across many pages about different ways to set permissions and different permissions to set but none of the ways suggested that I tried seemed towork for me. As a temporary solution, I uploaded my PHP file to aWindows 2003 server running Apache and PHP and it worked flawlessly (andmakes me suspicious that there is some huge security hole with theWindows box since it was able to execute with no permissions modifications). Any tips would be greatly appreciated. Thanks! Mari --- start my code --- <?php$in = fopen("/Applications/apache/htdocs/wp-php/wp.csv", "r");$out =fopen("/Applications/apache/htdocs/wp-php/ tableToCutAndPaste.txt","w"); $counter = 0; fwrite($out, "<table>\n"); while(($data = fgetcsv($in)) !== FALSE) { $paperNumber = $data[0]; $authors = $data[1]; $title = $data[2]; $filename = $paperNumber . ".pdf"; if(($counter % 2) == 0) { fwrite($out, "<tr>\n"); } else {fwrite($out, "<tr style=\"background: #cccccc;\"> \n");} fwrite($out, "<td><a href=\"http://www.example.com/workingpapers/getWorkingPaper.php? filename=$filename\">$paperNumber</a></td>\n"); fwrite($out, "<td>$authors</td>\n"); fwrite($out, "<td>$title</td>\n"); fwrite($out, "</tr>\n"); $counter++; } fwrite($out, "</table>\n"); fclose($in); fclose($out); ?> --- end my code ---What are the permissions on /Applications/apache/htdocs/wp-php/ ? Apache needs write permissions on that dir in order to create the file tableToCutAndPaste.txt. It's probably not a secure idea to give write permissions to that dir, so maybe create a subdir of tmp and change those permissions (one way): mkdir /Applications/apache/htdocs/wp-php/tmp chmod a+w /Applications/apache/htdocs/wp-php/tmpAlso, turn on error reporting so that you can see the exact problem. It may not be what you think. -- Thanks! -Shawn http://www.spidean.comThanks for the suggestions. I added the following lines to the very top of my code: error_reporting(E_ALL); mkdir("/Applications/apache/htdocs/wp-php/tmp", 0777, true); chmod("/Applications/apache/htdocs/wp-php/tmp", "a+w"); and I also changed the line where it tries to open the file to write to to go to the new directory: $out = fopen("/Applications/apache/htdocs/wp-php/tmp/ tableToCutAndPaste.txt", "w"); Below are the errors I got: --- start errors --- Warning: mkdir() [function.mkdir]: Permission denied in /Applications/apache/htdocs/wp-php/generateTable.php on line 5 Warning: chmod() [function.chmod]: No such file or directory in /Applications/apache/htdocs/wp-php/generateTable.php on line 6 Warning:fopen(/Applications/apache/htdocs/wp-php/tmp/ tableToCutAndPaste.txt) [function.fopen]: failed to open stream: No such file or directory in/Applications/apache/htdocs/wp-php/generateTable.php on line 9 Warning: fwrite(): supplied argument is not a valid stream resource in /Applications/apache/htdocs/wp-php/generateTable.php on line 13 Warning: fwrite(): supplied argument is not a valid stream resource in /Applications/apache/htdocs/wp-php/generateTable.php on line 22 Warning: fwrite(): supplied argument is not a valid stream resource in /Applications/apache/htdocs/wp-php/generateTable.php on line 27 Warning: fwrite(): supplied argument is not a valid stream resource in /Applications/apache/htdocs/wp-php/generateTable.php on line 28 Warning: fwrite(): supplied argument is not a valid stream resource in /Applications/apache/htdocs/wp-php/generateTable.php on line 29 Warning: fwrite(): supplied argument is not a valid stream resource in /Applications/apache/htdocs/wp-php/generateTable.php on line 30 Warning: fwrite(): supplied argument is not a valid stream resource in /Applications/apache/htdocs/wp-php/generateTable.php on line 35 Warning: fclose(): supplied argument is not a valid stream resource in /Applications/apache/htdocs/wp-php/generateTable.php on line 39 --- end errors --- The permissions are as follows (sorry I didn't think to include them in my original message): [Wed Jul 01 12:28:29] ~: ls -la /Applications/apache/htdocs/wp-php/ total 64 drwxr-xr-x 5 mari admin 170 Jun 29 16:47 . drwxr-xr-x 24 mari admin 816 Jun 29 16:47 .. -rw-r--r-- 1 mari admin 6148 Jun 28 21:11 .DS_Store -rwxr--r-- 1 mari admin 827 Jul 1 12:26 generateTable.php -rwxr--r-- 1 mari admin 17532 Jun 28 20:53 wp.csv [Wed Jul 01 12:29:01] ~: Thank you, MariThat's because the apache user doesn't have permissions to create the dir or change the permissions. The commands I gave you need to be runfrom the command line. -- Thanks! -Shawn http://www.spidean.comOh, duh, thank you. Doing it on the command line like you said worked great. I also had to edit my .csv file in TextWrangler to change the line breaks from \r to \r\n before it would work. Although the Mac's built-in firewall is set to block incoming traffic except for network time and something installed by Adobe when I installed CS4, I was wondering about the security of this technique if done on a production server. I only run this script by pointing my browser to http://localhost/wp-php/generateTable.php and I think with my firewall settings nobody else would be able to execute this script, but it seems if the tmp folder is set to world writable on a production server that anybody might be able to somehow upload amalicious file if they knew the location of tmp. Any thoughts? Thanks!Mari -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php