exec("tar -cvf filename.zip -C /home/public_html/uploads/ abc/")
Note the space before 'abc/'. The -C switch tells tar to first change directory to /home/public_html/uploads and then compress 'abc' folder.
You could also start the command from '/home/public_html/uploads' and specify the absolute path for the output file like
chdir('/home/public_html')
exec("tar -cvf /full/path/to/filename.zip abc/")