The contract doesn't include a player option, according to ESPN. Harris confirmed the agreement in a letter Sunday.
"There's nothing about my NBA journey that I would change," Harris wrote. "The teams, the cities, the teammates, the fans have all helped me grow into the player and person that I've become. Every time I moved, I saw the bright side. Always, I saw opportunity.
"Still, I want to be somewhere that I can call home. Finally, I can do that now: I'm a Philadelphia 76er."
Harris met with 76ers general manager Elton Brand and other team officials Sunday at the Sixers' practice facility and quickly reached a deal, according to ESPN. The forward originally joined Philadelphia in February after being traded away by the Los Angeles Clippers.
The 26-year-old forward has played with the Orlando Magic, Detroit Pistons, Milwaukee Bucks, Clippers and 76ers in his eight-season NBA career. He averaged 20.0 points, 7.9 rebounds and 2.8 assists per game in 82 regular-season contests this season.
"In every way, I am thrilled to be staying with the 76ers and getting to work on everything -- playing with my teammates again, impacting young people and, yes, bringing a championship back to Philadelphia," Harris wrote. "I can't wait to get started."
NBA free-agent contracts can't be officially signed until July 6.